<?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>148610</bug_id>
          
          <creation_ts>2015-08-29 13:03:10 -0700</creation_ts>
          <short_desc>JSC should infer property types</short_desc>
          <delta_ts>2015-09-21 19:25:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>148611</dependson>
    
    <dependson>148649</dependson>
    
    <dependson>148717</dependson>
    
    <dependson>149047</dependson>
    
    <dependson>149106</dependson>
    
    <dependson>149283</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1122000</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-29 13:03:10 -0700</bug_when>
    <thetext>Here&apos;s the basic design:

- PropertyMapEntry tells you if a property is subject to type inference.  If it is, then before storing into it, you need to look up the property&apos;s offset in the Structure&apos;s type inference table.  If the value being stored is a member of the type according to that table, you can store.  Otherwise, you need to do something to broaden the type.

- The Structure&apos;s type inference table maps offsets to InferredType objects.  InferredType objects are GC cells.

- When a Structure transition occurs, the new structure&apos;s type inference table will share the same InferredType objects as the old structure for all of the properties that the two structures have in common.  This ensures that if a store occurs on the old structure that causes a change in the inferred type, then users of the new structure immediately find out that they may now see that new type.  Note that this is slightly conservative: it also means that if the type changes on the new structure, the old structure will find out, even though it doesn&apos;t need to.

- All stores from a reflective context (i.e. not PutById) immediately disable type inference on the property by causing the InferredType to become TOP.

- Dictionary transitions disable type inference by simply not copying the type inference table.  This means that it doesn&apos;t affect the type inference of prior structures. It does mean that both the dictionary structure and all of its successors (including when it&apos;s flattened) will not enjoy type inference.  The upside is that dictionary puts - which are expensive to begin with - don&apos;t have to validate types.  We&apos;re assuming that once a dictionary transition happens then it&apos;s because many accesses will be reflective.  Another common use of dictionaries is for prototypes, which will often be dictionaries until they are flattened.  But prototype accesses usually benefit from immutable property inference already, so it&apos;s OK if type inference sometimes fails.

- Property type will not, at least initially, have any effect on property representation.  It just guarantees that you don&apos;t have to do some type check after load.

- Property type will include Structure, for those Structures that have a valid transition watchpoint.  InferredType will register a watchpoint on the transition, and will generalize to &quot;Object&quot; if the watchpoint fires.  That way, we don&apos;t have to worry about some object having the structure at the time we store a reference into a property, but then the object&apos;s structure changes.  We&apos;ll only do the inference if the transition had never fired, and when it does, the property finds out.

- All put_by_id inline caches will have to do type checks, except of course when we already have a proof about what the type is.  Such a proof will probably only happen in the DFG/FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122001</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-08-29 13:04:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/22490188&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122002</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-08-29 13:04:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/22490184&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122207</commentid>
    <comment_count>3</comment_count>
      <attachid>260294</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-31 10:41:03 -0700</bug_when>
    <thetext>Created attachment 260294
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122249</commentid>
    <comment_count>4</comment_count>
      <attachid>260305</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-31 12:21:29 -0700</bug_when>
    <thetext>Created attachment 260305
some more stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122270</commentid>
    <comment_count>5</comment_count>
      <attachid>260312</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-31 13:28:34 -0700</bug_when>
    <thetext>Created attachment 260312
wow, this is fun and easy!

Still more code to write, but it&apos;s coming together nicely so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122314</commentid>
    <comment_count>6</comment_count>
      <attachid>260323</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-31 15:24:33 -0700</bug_when>
    <thetext>Created attachment 260323
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122613</commentid>
    <comment_count>7</comment_count>
      <attachid>260376</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-01 11:49:29 -0700</bug_when>
    <thetext>Created attachment 260376
more stuff

Beefed up type check machinery in the DFG/FTL to deal with the ObjectWithStructureOrOther case.  That was the only kind of type that the DFG/FTL couldn&apos;t previously check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124930</commentid>
    <comment_count>8</comment_count>
      <attachid>260936</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-10 10:13:21 -0700</bug_when>
    <thetext>Created attachment 260936
a little more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125021</commentid>
    <comment_count>9</comment_count>
      <attachid>260955</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-10 14:11:17 -0700</bug_when>
    <thetext>Created attachment 260955
rebased and using a slightly more space-optimal InferredTypeTable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125036</commentid>
    <comment_count>10</comment_count>
      <attachid>260958</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-10 14:53:16 -0700</bug_when>
    <thetext>Created attachment 260958
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125360</commentid>
    <comment_count>11</comment_count>
      <attachid>261049</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-11 23:57:25 -0700</bug_when>
    <thetext>Created attachment 261049
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125452</commentid>
    <comment_count>12</comment_count>
      <attachid>261074</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-12 22:07:35 -0700</bug_when>
    <thetext>Created attachment 261074
just a bit more

I&apos;ve wired the put_by_id store checks into most things.  I still need to wire it into the LLInt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125755</commentid>
    <comment_count>13</comment_count>
      <attachid>261136</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-14 15:13:36 -0700</bug_when>
    <thetext>Created attachment 261136
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125843</commentid>
    <comment_count>14</comment_count>
      <attachid>261159</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-14 18:47:47 -0700</bug_when>
    <thetext>Created attachment 261159
some more

Slowly integrating into LLInt put_by_id inline caching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126047</commentid>
    <comment_count>15</comment_count>
      <attachid>261216</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 11:04:18 -0700</bug_when>
    <thetext>Created attachment 261216
LLInt put_by_id type checking is written

OMG I&apos;m so close now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126087</commentid>
    <comment_count>16</comment_count>
      <attachid>261223</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 12:12:44 -0700</bug_when>
    <thetext>Created attachment 261223
starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126138</commentid>
    <comment_count>17</comment_count>
      <attachid>261240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 14:44:44 -0700</bug_when>
    <thetext>Created attachment 261240
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126145</commentid>
    <comment_count>18</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-09-15 14:57:03 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created attachment 261240 [details]
&gt; it compiles!

r=me :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126150</commentid>
    <comment_count>19</comment_count>
      <attachid>261243</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 15:04:55 -0700</bug_when>
    <thetext>Created attachment 261243
it compiles!

The last file I uploaded was an older patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126186</commentid>
    <comment_count>20</comment_count>
      <attachid>261256</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 16:21:27 -0700</bug_when>
    <thetext>Created attachment 261256
it inferred a type!

It just inferred that &quot;f&quot; is an Int32 below:


function foo(o) {
    return o.f + 1;
}

noInline(foo);

for (var i = 0; i &lt; 10000; ++i)
    foo({f:i});</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126229</commentid>
    <comment_count>21</comment_count>
      <attachid>261275</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 18:04:45 -0700</bug_when>
    <thetext>Created attachment 261275
OMG it passed some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126249</commentid>
    <comment_count>22</comment_count>
      <attachid>261284</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 19:30:22 -0700</bug_when>
    <thetext>Created attachment 261284
it passes many tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126267</commentid>
    <comment_count>23</comment_count>
      <attachid>261290</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 20:44:19 -0700</bug_when>
    <thetext>Created attachment 261290
more fixing

Right now it looks like I might have introduced a performance pathology to inline caches because the no-access-inlining tests are timing out.  Other than that, this is starting to look good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126277</commentid>
    <comment_count>24</comment_count>
      <attachid>261295</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-15 21:25:12 -0700</bug_when>
    <thetext>Created attachment 261295
even more fixing

Fixed tag register usage in the put_by_id type check.  That&apos;s what was causing bad performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126429</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-16 11:59:48 -0700</bug_when>
    <thetext>This looks pretty good.  Now I just need to fix the raytrace regression, and this will turn into a really nice speed-up.


Benchmark report for Octane on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r189810)
&quot;PropTypeInference&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r189810)

Collected 8 samples per benchmark/VM, with 8 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
times with 95% confidence intervals in milliseconds.

                           TipOfTree             PropTypeInference                                 

encrypt                 0.16891+-0.00252          0.16502+-0.00272         might be 1.0236x faster
decrypt                 3.02377+-0.00694    ^     2.92723+-0.05261       ^ definitely 1.0330x faster
deltablue      x2       0.16084+-0.00654    ^     0.13684+-0.00191       ^ definitely 1.1754x faster
earley                  0.30135+-0.00227    ?     0.30291+-0.00087       ?
boyer                   4.28630+-0.02453    ?     4.39991+-0.09832       ? might be 1.0265x slower
navier-stokes  x2       4.80670+-0.01273          4.80088+-0.00803       
raytrace       x2       0.90676+-0.02904    !     1.26826+-0.22724       ! definitely 1.3987x slower
richards       x2       0.10723+-0.00159    ^     0.08840+-0.00084       ^ definitely 1.2130x faster
splay          x2       0.32863+-0.00254    ?     0.33190+-0.00335       ?
regexp         x2      24.67865+-0.18165         24.35562+-0.48648         might be 1.0133x faster
pdfjs          x2      36.64304+-0.60033    ?    36.82721+-0.31432       ?
mandreel       x2      42.42468+-0.31628         42.30698+-0.27770       
gbemu          x2      34.76927+-0.64065         34.30328+-1.82136         might be 1.0136x faster
closure                 0.57134+-0.00237    ?     0.57294+-0.00228       ?
jquery                  7.09233+-0.03046    !     7.22342+-0.03013       ! definitely 1.0185x slower
box2d          x2      10.08765+-0.05900    ^     9.09621+-0.07398       ^ definitely 1.1090x faster
zlib           x2     386.80319+-6.80693        381.44449+-10.04212        might be 1.0140x faster
typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ? might be 1.0280x slower

&lt;geometric&gt;             5.51512+-0.02974          5.46103+-0.07040         might be 1.0099x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126437</commentid>
    <comment_count>26</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-09-16 12:55:13 -0700</bug_when>
    <thetext>(In reply to comment #25)

&gt; typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
&gt; might be 1.0280x slower

I&apos;m curious, given what i sort of code type script is ostensibly for, i would have expected improvement here. Are we already just doing something good without this analysis?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126440</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-16 13:12:45 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; 
&gt; &gt; typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
&gt; &gt; might be 1.0280x slower
&gt; 
&gt; I&apos;m curious, given what i sort of code type script is ostensibly for, i
&gt; would have expected improvement here. Are we already just doing something
&gt; good without this analysis?

I don&apos;t know what you mean.  &quot;Typescript&quot; is a typescript compiler, not necessarily a representative Typescript program.

Also, the goal of property type inference is not to reinfer the original types used by every possible CrappyLanguage-&gt;JS compiler.  For example, property type inference only infers that a property has some specific object type if that type doesn&apos;t have subtyping.

And yes, we are already doing a pretty good job of running this benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126441</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-16 13:13:34 -0700</bug_when>
    <thetext>Looks like the Raytrace regression is mostly a warm-up time regression.  The benchmark runs a bit faster when you let it run long enough.

I&apos;ll keep investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126443</commentid>
    <comment_count>29</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-09-16 13:19:38 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; 
&gt; &gt; &gt; typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
&gt; &gt; &gt; might be 1.0280x slower
&gt; &gt; 
&gt; &gt; I&apos;m curious, given what i sort of code type script is ostensibly for, i
&gt; &gt; would have expected improvement here. Are we already just doing something
&gt; &gt; good without this analysis?
&gt; 
&gt; I don&apos;t know what you mean.  &quot;Typescript&quot; is a typescript compiler, not
&gt; necessarily a representative Typescript program.
&gt; 
Ah, ok, that makes substantially more sense.

&gt; Also, the goal of property type inference is not to reinfer the original
&gt; types used by every possible CrappyLanguage-&gt;JS compiler.  For example,
&gt; property type inference only infers that a property has some specific object
&gt; type if that type doesn&apos;t have sub typing.

Does that apply even for sane ES6? e.g.

class Foo { };
class Bar extends Foo { };

or the equivalent for manual JS inheritance?

&gt; 
&gt; And yes, we are already doing a pretty good job of running this benchmark.
That was what i figured :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126446</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-16 13:37:20 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #27)
&gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; typescript     x2     633.37460+-7.97292    ?   651.13870+-10.22388      ?
&gt; &gt; &gt; &gt; might be 1.0280x slower
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m curious, given what i sort of code type script is ostensibly for, i
&gt; &gt; &gt; would have expected improvement here. Are we already just doing something
&gt; &gt; &gt; good without this analysis?
&gt; &gt; 
&gt; &gt; I don&apos;t know what you mean.  &quot;Typescript&quot; is a typescript compiler, not
&gt; &gt; necessarily a representative Typescript program.
&gt; &gt; 
&gt; Ah, ok, that makes substantially more sense.
&gt; 
&gt; &gt; Also, the goal of property type inference is not to reinfer the original
&gt; &gt; types used by every possible CrappyLanguage-&gt;JS compiler.  For example,
&gt; &gt; property type inference only infers that a property has some specific object
&gt; &gt; type if that type doesn&apos;t have sub typing.
&gt; 
&gt; Does that apply even for sane ES6? e.g.
&gt; 
&gt; class Foo { };
&gt; class Bar extends Foo { };
&gt; 
&gt; or the equivalent for manual JS inheritance?

If you have a property that points to either Foo or Bar then we will merge the two to &quot;Object&quot;.  I.e. it&apos;s not super useful for most programs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126500</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-16 16:03:21 -0700</bug_when>
    <thetext>Well, this is pretty good.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r189810)
&quot;PropTypeInference&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r189810)

Collected 8 samples per benchmark/VM, with 8 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree             PropTypeInference                                 
SunSpider:
   3d-cube                                            4.6250+-0.1959     ?      4.8483+-0.1788        ? might be 1.0483x slower
   3d-morph                                           5.3803+-0.2129            5.2288+-0.0549          might be 1.0290x faster
   3d-raytrace                                        5.2417+-0.1950            5.2153+-0.0721        
   access-binary-trees                                2.1002+-0.0765     ?      2.2199+-0.1277        ? might be 1.0570x slower
   access-fannkuch                                    5.7328+-0.4433            5.4622+-0.0536          might be 1.0495x faster
   access-nbody                                       2.5158+-0.1876     ?      2.6108+-0.2258        ? might be 1.0377x slower
   access-nsieve                                      3.0552+-0.1184            2.9935+-0.0353          might be 1.0206x faster
   bitops-3bit-bits-in-byte                           1.1770+-0.0625            1.1231+-0.0179          might be 1.0480x faster
   bitops-bits-in-byte                                3.1704+-0.0397     ?      3.2297+-0.0698        ? might be 1.0187x slower
   bitops-bitwise-and                                 2.0616+-0.0557            1.9935+-0.0344          might be 1.0341x faster
   bitops-nsieve-bits                                 2.9762+-0.0934     ?      3.0097+-0.0858        ? might be 1.0113x slower
   controlflow-recursive                              2.3121+-0.1200     ?      2.3300+-0.0930        ?
   crypto-aes                                         3.9079+-0.1019     ?      4.4235+-0.6217        ? might be 1.1319x slower
   crypto-md5                                         2.4789+-0.1039     ?      2.5037+-0.0760        ?
   crypto-sha1                                        2.4169+-0.1869            2.2813+-0.1240          might be 1.0594x faster
   date-format-tofte                                  6.7809+-0.2225     ?      6.7858+-0.1401        ?
   date-format-xparb                                  4.9249+-0.5210            4.6237+-0.1594          might be 1.0651x faster
   math-cordic                                        2.8792+-0.1427     ?      2.9638+-0.2478        ? might be 1.0294x slower
   math-partial-sums                                  4.7814+-0.0319            4.7479+-0.0652        
   math-spectral-norm                                 1.9031+-0.0461     ?      1.9554+-0.0894        ? might be 1.0275x slower
   regexp-dna                                         6.4941+-0.2347            6.4583+-0.4996        
   string-base64                                      4.8989+-0.6884            4.3126+-0.0724          might be 1.1360x faster
   string-fasta                                       5.7323+-0.0558            5.7038+-0.1034        
   string-tagcloud                                    8.1845+-0.3592            7.9359+-0.0612          might be 1.0313x faster
   string-unpack-code                                18.7733+-0.9083           18.2597+-0.6957          might be 1.0281x faster
   string-validate-input                              4.5981+-0.0971            4.5358+-0.1315          might be 1.0137x faster

   &lt;arithmetic&gt;                                       4.5809+-0.0416            4.5291+-0.0388          might be 1.0114x faster

                                                        TipOfTree             PropTypeInference                                 
LongSpider:
   3d-cube                                          802.8184+-1.1690     ^    792.2674+-2.8621        ^ definitely 1.0133x faster
   3d-morph                                        1483.1839+-2.6321     ?   1498.9178+-34.1944       ? might be 1.0106x slower
   3d-raytrace                                      591.0079+-5.0994          588.9049+-4.5188        
   access-binary-trees                              802.6959+-4.9928          796.0794+-3.3422        
   access-fannkuch                                  273.5180+-4.8238          272.5452+-2.2775        
   access-nbody                                     503.6322+-0.3070     ?    505.7096+-3.1017        ?
   access-nsieve                                    368.1664+-12.4399    ?    374.9346+-11.5301       ? might be 1.0184x slower
   bitops-3bit-bits-in-byte                          33.9543+-0.7093     ?     34.0146+-0.9645        ?
   bitops-bits-in-byte                               75.6387+-2.9604           75.0401+-1.1219        
   bitops-nsieve-bits                               398.8509+-2.2453     ?    400.7792+-3.4765        ?
   controlflow-recursive                            426.2560+-4.0713          423.8850+-1.4406        
   crypto-aes                                       566.8598+-7.3313          559.2004+-12.1552         might be 1.0137x faster
   crypto-md5                                       431.2558+-1.7126          430.4504+-2.3067        
   crypto-sha1                                      636.5125+-1.5853          628.6773+-9.3324          might be 1.0125x faster
   date-format-tofte                                501.2081+-5.4174     ?    502.5661+-4.6859        ?
   date-format-xparb                                655.4932+-2.2265     ?    663.7870+-29.3137       ? might be 1.0127x slower
   hash-map                                         166.4718+-4.5448          164.2834+-4.0662          might be 1.0133x faster
   math-cordic                                      474.8139+-1.5644          474.4279+-1.3808        
   math-partial-sums                                462.2896+-2.8386     ^    455.5179+-1.6345        ^ definitely 1.0149x faster
   math-spectral-norm                               546.9286+-2.5782     ?    547.5915+-3.4611        ?
   string-base64                                    352.7332+-5.7302     ?    355.2516+-18.7733       ?
   string-fasta                                     365.2469+-3.2275          362.0158+-1.8947        
   string-tagcloud                                  174.6937+-1.3866     ?    176.0477+-2.2160        ?

   &lt;geometric&gt;                                      384.6890+-1.3348          384.0363+-1.8207          might be 1.0017x faster

                                                        TipOfTree             PropTypeInference                                 
V8Spider:
   crypto                                            50.1670+-1.5238           47.8391+-1.2478          might be 1.0487x faster
   deltablue                                         87.0811+-1.7276     ^     77.9060+-3.1056        ^ definitely 1.1178x faster
   earley-boyer                                      41.1463+-1.0819     ?     42.8026+-1.3212        ? might be 1.0403x slower
   raytrace                                          33.1436+-1.8860           31.0324+-1.1950          might be 1.0680x faster
   regexp                                            61.8413+-1.2828     ?     62.4763+-1.5282        ? might be 1.0103x slower
   richards                                          63.0591+-1.7792     ^     52.6292+-1.3454        ^ definitely 1.1982x faster
   splay                                             34.1602+-1.0702     ?     35.6920+-1.5597        ? might be 1.0448x slower

   &lt;geometric&gt;                                       50.0840+-0.5988     ^     47.9038+-0.8425        ^ definitely 1.0455x faster

                                                        TipOfTree             PropTypeInference                                 
Octane:
   encrypt                                           0.16871+-0.00284    ^     0.16195+-0.00101       ^ definitely 1.0417x faster
   decrypt                                           3.02910+-0.01487    ^     2.90365+-0.01669       ^ definitely 1.0432x faster
   deltablue                                x2       0.15958+-0.00651    ^     0.13905+-0.00222       ^ definitely 1.1476x faster
   earley                                            0.30207+-0.00283    ?     0.30534+-0.00478       ? might be 1.0108x slower
   boyer                                             4.28637+-0.01892    ?     4.32666+-0.02796       ?
   navier-stokes                            x2       4.82749+-0.03323    ?     4.86614+-0.12574       ?
   raytrace                                 x2       0.89613+-0.00652    ^     0.85767+-0.00248       ^ definitely 1.0448x faster
   richards                                 x2       0.10654+-0.00161    ^     0.08825+-0.00060       ^ definitely 1.2072x faster
   splay                                    x2       0.32553+-0.00271    ?     0.33166+-0.00417       ? might be 1.0188x slower
   regexp                                   x2      24.63893+-0.18265         24.30294+-0.16241         might be 1.0138x faster
   pdfjs                                    x2      36.54433+-0.30398    ?    36.81652+-0.35804       ?
   mandreel                                 x2      42.34141+-0.29707         42.28839+-0.19672       
   gbemu                                    x2      34.27753+-0.40394         34.09559+-2.67689       
   closure                                           0.57291+-0.00247    ?     0.57307+-0.00290       ?
   jquery                                            7.13432+-0.05176    !     7.21157+-0.01591       ! definitely 1.0108x slower
   box2d                                    x2      10.09660+-0.04806    ^     9.02640+-0.06321       ^ definitely 1.1186x faster
   zlib                                     x2     379.70389+-16.65197   ?   387.33121+-3.19627       ? might be 1.0201x slower
   typescript                               x2     641.95547+-21.02952   ?   654.81155+-3.22706       ? might be 1.0200x slower

   &lt;geometric&gt;                                       5.49639+-0.03297    ^     5.33200+-0.02881       ^ definitely 1.0308x faster

                                                        TipOfTree             PropTypeInference                                 
Kraken:
   ai-astar                                          221.069+-5.365      ^     125.807+-0.793         ^ definitely 1.7572x faster
   audio-beat-detection                               50.538+-0.249             50.134+-0.348         
   audio-dft                                          96.834+-2.341             96.104+-1.916         
   audio-fft                                          35.923+-2.081             35.296+-0.479           might be 1.0178x faster
   audio-oscillator                                   60.405+-2.863      ^      56.408+-1.001         ^ definitely 1.0709x faster
   imaging-darkroom                                   61.894+-1.930             60.241+-1.223           might be 1.0274x faster
   imaging-desaturate                                 48.245+-0.230      ?      48.597+-1.863         ?
   imaging-gaussian-blur                              85.408+-0.861             85.069+-0.993         
   json-parse-financial                               40.614+-1.598             39.319+-0.568           might be 1.0330x faster
   json-stringify-tinderbox                           22.480+-0.385             22.220+-0.664           might be 1.0117x faster
   stanford-crypto-aes                                41.040+-1.601             40.891+-0.830         
   stanford-crypto-ccm                                36.045+-1.871             34.894+-0.692           might be 1.0330x faster
   stanford-crypto-pbkdf2                             92.066+-0.329      ?      97.040+-5.212         ? might be 1.0540x slower
   stanford-crypto-sha256-iterative                   36.476+-1.664             36.076+-0.551           might be 1.0111x faster

   &lt;arithmetic&gt;                                       66.360+-0.562      ^      59.150+-0.532         ^ definitely 1.1219x faster

                                                        TipOfTree             PropTypeInference                                 
JSRegress:
   abc-forward-loop-equal                            29.5717+-0.7997     ?     29.6232+-0.6661        ?
   abc-postfix-backward-loop                         29.3344+-0.4990     ?     29.6458+-0.7477        ? might be 1.0106x slower
   abc-simple-backward-loop                          28.9061+-0.4349     ?     29.2442+-0.4026        ? might be 1.0117x slower
   abc-simple-forward-loop                           29.3086+-0.8344           29.2127+-0.4515        
   abc-skippy-loop                                   20.8447+-0.3063     ?     21.1579+-0.3780        ? might be 1.0150x slower
   abs-boolean                                        2.4233+-0.0424     ?      2.4713+-0.1055        ? might be 1.0198x slower
   adapt-to-double-divide                            16.3937+-0.4955           16.0262+-0.3545          might be 1.0229x faster
   aliased-arguments-getbyval                         1.2181+-0.0886     ?      1.2209+-0.0591        ?
   allocate-big-object                                2.5926+-0.4533            2.5301+-0.1283          might be 1.0247x faster
   arguments-named-and-reflective                    10.6788+-0.3871           10.6289+-0.3912        
   arguments-out-of-bounds                            9.6739+-0.4936            9.6472+-0.4291        
   arguments-strict-mode                             10.1104+-0.7169            9.6148+-0.4352          might be 1.0515x faster
   arguments                                          8.6199+-0.2681     ?      9.1803+-1.7263        ? might be 1.0650x slower
   arity-mismatch-inlining                            0.8607+-0.0314     ?      0.9181+-0.1511        ? might be 1.0667x slower
   array-access-polymorphic-structure                 5.9170+-0.0712     !      7.3939+-0.3762        ! definitely 1.2496x slower
   array-nonarray-polymorhpic-access                 23.5085+-0.7201     ?     23.7864+-0.7931        ? might be 1.0118x slower
   array-prototype-every                             76.9250+-3.3893     ?     77.1250+-3.1070        ?
   array-prototype-forEach                           75.4867+-0.7674     ?     76.1922+-1.4677        ?
   array-prototype-map                               81.3942+-1.5720     ?     82.5326+-3.7403        ? might be 1.0140x slower
   array-prototype-reduce                            71.1826+-1.1518           71.0775+-1.0542        
   array-prototype-reduceRight                       72.5941+-3.5006     ?     73.2465+-3.9408        ?
   array-prototype-some                              75.4871+-0.8979     ?     76.4512+-1.0151        ? might be 1.0128x slower
   array-splice-contiguous                           20.6437+-0.9323           20.1867+-0.5569          might be 1.0226x faster
   array-with-double-add                              3.3815+-0.0418     ?      3.4146+-0.1078        ?
   array-with-double-increment                        3.1118+-0.1776     ?      3.1120+-0.1433        ?
   array-with-double-mul-add                          4.1994+-0.0758            4.1393+-0.0397          might be 1.0145x faster
   array-with-double-sum                              3.1522+-0.0571     ?      3.1703+-0.0443        ?
   array-with-int32-add-sub                           5.7793+-0.2497            5.7340+-0.2260        
   array-with-int32-or-double-sum                     3.2869+-0.0688            3.2415+-0.0408          might be 1.0140x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.5993+-0.5443           25.3614+-0.2696        
   ArrayBuffer-DataView-alloc-long-lived             12.0539+-0.6530           11.6406+-0.2431          might be 1.0355x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6175+-0.2479            3.4754+-0.0260          might be 1.0409x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.3481+-1.0535     ?     30.4585+-0.9591        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.4596+-1.4145     ?     21.2423+-2.2532        ? might be 1.0383x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.3514+-0.3393           12.0435+-0.3403          might be 1.0256x faster
   ArrayBuffer-Int8Array-alloc                        9.7338+-0.7646            9.3685+-0.2558          might be 1.0390x faster
   arrowfunction-call                                10.8471+-0.4929           10.5509+-0.1284          might be 1.0281x faster
   asmjs_bool_bug                                     7.4742+-0.1806     ?      7.5392+-0.3326        ?
   assign-custom-setter-polymorphic                   2.4456+-0.0496     ?      2.5216+-0.0642        ? might be 1.0311x slower
   assign-custom-setter                               3.4162+-0.0414     ?      3.4782+-0.0870        ? might be 1.0182x slower
   basic-set                                          8.5318+-0.2485            8.3574+-0.3100          might be 1.0209x faster
   big-int-mul                                        3.4236+-0.0315     ?      3.5718+-0.2324        ? might be 1.0433x slower
   boolean-test                                       3.3359+-0.3124            3.1011+-0.0610          might be 1.0757x faster
   branch-fold                                        3.6116+-0.0339     ?      3.6716+-0.1598        ? might be 1.0166x slower
   branch-on-string-as-boolean                       16.9776+-0.4538           16.8361+-0.3111        
   by-val-generic                                     2.5794+-0.3077            2.4775+-0.0747          might be 1.0412x faster
   call-spread-apply                                 26.9822+-1.3769           26.9507+-1.3812        
   call-spread-call                                  21.0297+-0.6743     ?     22.0792+-0.9198        ? might be 1.0499x slower
   captured-assignments                               0.4579+-0.0733            0.4440+-0.0284          might be 1.0314x faster
   cast-int-to-double                                 5.0800+-0.0949     ?      5.0805+-0.0959        ?
   cell-argument                                      6.4022+-0.3258            6.2119+-0.4405          might be 1.0306x faster
   cfg-simplify                                       2.8950+-0.0493     ?      2.9511+-0.1494        ? might be 1.0194x slower
   chain-getter-access                                8.3528+-0.1082     ?      8.6506+-0.3623        ? might be 1.0357x slower
   cmpeq-obj-to-obj-other                            12.1717+-0.7570     ?     12.2025+-0.8686        ?
   constant-test                                      4.9201+-0.1929            4.8553+-0.0522          might be 1.0134x faster
   create-lots-of-functions                           9.3572+-0.3303     ?      9.7289+-0.5300        ? might be 1.0397x slower
   cse-new-array-buffer                               2.3886+-0.1963            2.3618+-0.1541          might be 1.0113x faster
   cse-new-array                                      2.6270+-0.3218            2.5959+-0.2751          might be 1.0120x faster
   DataView-custom-properties                        31.4965+-0.9413           30.8705+-0.7066          might be 1.0203x faster
   delay-tear-off-arguments-strictmode               12.0873+-0.3038     ?     12.5700+-0.5805        ? might be 1.0399x slower
   deltablue-varargs                                175.1500+-5.4030          173.0341+-5.7436          might be 1.0122x faster
   destructuring-arguments                          166.0807+-1.8202     ?    169.4739+-11.7492       ? might be 1.0204x slower
   destructuring-parameters-overridden-by-function   
                                                      0.4597+-0.0271     ?      0.6080+-0.1931        ? might be 1.3226x slower
   destructuring-swap                                 4.8339+-0.1126     ?      4.8463+-0.1984        ?
   direct-arguments-getbyval                          1.2357+-0.1176            1.2206+-0.0696          might be 1.0124x faster
   div-boolean-double                                 5.3571+-0.0973            5.3013+-0.1179          might be 1.0105x faster
   div-boolean                                        8.1472+-0.1437     ?      8.2857+-0.3241        ? might be 1.0170x slower
   double-get-by-val-out-of-bounds                    4.7416+-0.6329            4.7011+-0.6800        
   double-pollution-getbyval                          8.6831+-0.1004     ?      8.6996+-0.1218        ?
   double-pollution-putbyoffset                       3.6554+-0.1064            3.5929+-0.0919          might be 1.0174x faster
   double-real-use                                   23.9808+-0.5169           23.8664+-0.6328        
   double-to-int32-typed-array-no-inline              2.2318+-0.1811            2.1806+-0.0829          might be 1.0235x faster
   double-to-int32-typed-array                        2.0368+-0.0474     ?      2.0776+-0.1425        ? might be 1.0200x slower
   double-to-uint32-typed-array-no-inline             2.2336+-0.0794     ?      2.2965+-0.0875        ? might be 1.0281x slower
   double-to-uint32-typed-array                       2.0689+-0.0358     ?      2.1271+-0.1150        ? might be 1.0281x slower
   elidable-new-object-dag                           35.0308+-1.1095           34.5814+-1.2698          might be 1.0130x faster
   elidable-new-object-roflcopter                    34.0688+-0.6941           32.5712+-1.1193          might be 1.0460x faster
   elidable-new-object-then-call                     31.8958+-0.9847     ?     32.2336+-0.8130        ? might be 1.0106x slower
   elidable-new-object-tree                          37.2376+-0.5414     ?     37.6832+-1.1244        ? might be 1.0120x slower
   empty-string-plus-int                              4.6707+-0.0832     !      4.8784+-0.0332        ! definitely 1.0445x slower
   emscripten-cube2hash                              25.9473+-1.2074     ?     27.8556+-1.4515        ? might be 1.0735x slower
   exit-length-on-plain-object                       12.3092+-0.3740     !     15.2178+-0.4169        ! definitely 1.2363x slower
   external-arguments-getbyval                        1.2769+-0.0598            1.2050+-0.0979          might be 1.0597x faster
   external-arguments-putbyval                        2.1420+-0.0710     ?      2.2119+-0.1281        ? might be 1.0326x slower
   fixed-typed-array-storage-var-index                1.2164+-0.0501            1.1682+-0.0123          might be 1.0412x faster
   fixed-typed-array-storage                          0.8961+-0.0327     ?      0.9125+-0.0668        ? might be 1.0184x slower
   Float32Array-matrix-mult                           3.8965+-0.0497     !      4.3716+-0.4038        ! definitely 1.1219x slower
   Float32Array-to-Float64Array-set                  46.5005+-0.5037     ?     47.1925+-0.8722        ? might be 1.0149x slower
   Float64Array-alloc-long-lived                     71.4377+-1.2180     ?     72.8191+-6.0410        ? might be 1.0193x slower
   Float64Array-to-Int16Array-set                    57.4603+-1.8593           57.1108+-1.9288        
   fold-double-to-int                                12.4950+-0.5810           12.1107+-0.3008          might be 1.0317x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.9265+-1.0117     ?     11.4056+-1.5478        ? might be 1.0438x slower
   fold-get-by-id-to-multi-get-by-offset             10.8847+-1.4517           10.1502+-0.5742          might be 1.0724x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.7002+-1.2102     ?      9.0302+-0.7432        ? might be 1.0379x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     10.0186+-2.6535            8.6365+-0.6155          might be 1.1600x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.9536+-1.5074           10.4555+-1.2798          might be 1.0476x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.7541+-1.1494     !     10.4541+-0.4607        ! definitely 1.5478x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.4175+-0.4695     ?      9.6074+-0.6219        ? might be 1.0202x slower
   fold-put-by-id-to-multi-put-by-offset             11.0346+-0.9828     ?     11.3848+-1.0905        ? might be 1.0317x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     11.1555+-1.1047     ?     11.3719+-0.6603        ? might be 1.0194x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.4830+-1.0065     ?     10.7354+-0.5549        ? might be 1.0241x slower
   fold-put-structure                                 6.4121+-0.7574     ?      7.6949+-0.7344        ? might be 1.2001x slower
   for-of-iterate-array-entries                      10.9035+-0.1343     ?     11.2227+-0.5828        ? might be 1.0293x slower
   for-of-iterate-array-keys                          3.5661+-0.3586            3.4253+-0.1196          might be 1.0411x faster
   for-of-iterate-array-values                        3.5945+-0.2273            3.5343+-0.2919          might be 1.0170x faster
   fround                                            17.7127+-0.5042     ?     17.8475+-0.4742        ?
   ftl-library-inlining-dataview                     56.7204+-1.5642     ?     56.8355+-1.0749        ?
   ftl-library-inlining                              95.7446+-1.0132           95.6008+-0.6416        
   function-call                                     10.7158+-0.2095     ?     10.9701+-0.4081        ? might be 1.0237x slower
   function-dot-apply                                 2.0196+-0.0444     ?      2.2635+-0.4926        ? might be 1.1207x slower
   function-test                                      2.7177+-0.0843     ?      2.7506+-0.0400        ? might be 1.0121x slower
   function-with-eval                                93.3626+-0.4010           93.1958+-1.1569        
   gcse-poly-get-less-obvious                        20.1965+-0.2359     ?     20.3802+-0.3880        ?
   gcse-poly-get                                     24.8224+-2.0524     ^     20.9301+-0.2630        ^ definitely 1.1860x faster
   gcse                                               3.8448+-0.1134            3.5800+-0.4065          might be 1.0740x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7037+-0.1058            2.6115+-0.0665          might be 1.0353x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7253+-0.2055     ^      4.7585+-0.1274        ^ definitely 1.2032x faster
   get-by-id-chain-from-try-block                     5.5022+-0.1929            5.3586+-0.0455          might be 1.0268x faster
   get-by-id-check-structure-elimination              4.4259+-0.1577     ^      3.9153+-0.0829        ^ definitely 1.1304x faster
   get-by-id-proto-or-self                           15.8441+-0.9135           15.5797+-0.8584          might be 1.0170x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8765+-0.0188     ?      2.9175+-0.0559        ? might be 1.0142x slower
   get-by-id-self-or-proto                           15.6098+-1.0422           15.4301+-0.9243          might be 1.0116x faster
   get-by-val-out-of-bounds                           4.3539+-0.1028     ?      4.4181+-0.3469        ? might be 1.0148x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7909+-0.0403            2.7631+-0.0947          might be 1.0101x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.1374+-0.2374            5.9023+-0.1430          might be 1.0398x faster
   get-by-val-with-string-chain-from-try-block   
                                                      5.5459+-0.1212     ?      5.6515+-0.2643        ? might be 1.0190x slower
   get-by-val-with-string-check-structure-elimination   
                                                      5.6353+-1.1329            5.1361+-0.1171          might be 1.0972x faster
   get-by-val-with-string-proto-or-self              16.4633+-1.0073           15.6938+-0.8350          might be 1.0490x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.3479+-0.0601     ^      3.0869+-0.0839        ^ definitely 1.0846x faster
   get-by-val-with-string-self-or-proto              15.7904+-0.6484           15.6165+-0.5953          might be 1.0111x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0858+-0.0214     ?      3.1515+-0.0762        ? might be 1.0213x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3023+-0.1258     ?     12.4216+-0.1806        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.5128+-0.0816     ?      5.6950+-0.2452        ? might be 1.0331x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.2745+-0.1025     ?     11.4391+-0.1639        ? might be 1.0146x slower
   get-by-val-with-symbol-proto-or-self              15.6640+-0.6903           15.6021+-0.3291        
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.0652+-0.8184            3.9002+-0.3238          might be 1.0423x faster
   get-by-val-with-symbol-self-or-proto              15.3779+-0.3621     ?     15.8925+-0.4612        ? might be 1.0335x slower
   get_callee_monomorphic                             2.5283+-0.2841            2.3928+-0.0820          might be 1.0566x faster
   get_callee_polymorphic                             3.6313+-0.3648     ?      3.6917+-0.4619        ? might be 1.0166x slower
   getter-no-activation                               4.8243+-0.1602     ?      4.8625+-0.2385        ?
   getter-prototype                                   8.8296+-0.1172     ^      8.0971+-0.4452        ^ definitely 1.0905x faster
   getter-richards                                  121.6720+-6.0224          116.7231+-4.3454          might be 1.0424x faster
   getter                                             5.4981+-0.4648            5.2302+-0.3808          might be 1.0512x faster
   global-object-access-with-mutating-structure   
                                                      5.5336+-0.1020     ?      5.7931+-0.2739        ? might be 1.0469x slower
   global-var-const-infer-fire-from-opt               0.8446+-0.0385     ?      0.9189+-0.2117        ? might be 1.0879x slower
   global-var-const-infer                             0.6885+-0.0740            0.6471+-0.0203          might be 1.0639x faster
   hard-overflow-check-equal                         33.0935+-0.9574     ^     27.0496+-1.6507        ^ definitely 1.2234x faster
   hard-overflow-check                               32.7499+-0.9313     ^     26.3548+-0.5100        ^ definitely 1.2427x faster
   HashMap-put-get-iterate-keys                      27.3331+-0.9749           25.9342+-1.0295          might be 1.0539x faster
   HashMap-put-get-iterate                           29.3111+-0.6953           28.9029+-0.9642          might be 1.0141x faster
   HashMap-string-put-get-iterate                    25.4756+-1.4210           24.7638+-1.5794          might be 1.0287x faster
   hoist-make-rope                                    8.3820+-0.6547     ?      8.7106+-0.4068        ? might be 1.0392x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.1714+-0.0716     ^      3.7039+-0.0921        ^ definitely 1.1262x faster
   hoist-poly-check-structure                         3.3055+-0.0838     ?      3.3567+-0.4233        ? might be 1.0155x slower
   imul-double-only                                   7.3764+-0.5683            7.2557+-0.1262          might be 1.0166x faster
   imul-int-only                                      8.7517+-0.9824            8.7089+-0.8251        
   imul-mixed                                         7.1204+-0.2967            7.0125+-0.4385          might be 1.0154x faster
   in-four-cases                                     17.5611+-0.7770           16.9061+-0.2895          might be 1.0387x faster
   in-one-case-false                                  9.1648+-0.0268     !      9.9040+-0.6752        ! definitely 1.0807x slower
   in-one-case-true                                   9.4945+-0.5018     ?      9.6930+-0.5692        ? might be 1.0209x slower
   in-two-cases                                       9.9522+-0.3876     ?      9.9612+-0.4333        ?
   indexed-properties-in-objects                      2.7026+-0.0258     !      2.8047+-0.0715        ! definitely 1.0377x slower
   infer-closure-const-then-mov-no-inline             3.6418+-0.1629            3.5840+-0.0604          might be 1.0161x faster
   infer-closure-const-then-mov                      18.6453+-0.5731           18.5856+-0.5846        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.7996+-0.1181     ?     10.8659+-0.2430        ?
   infer-closure-const-then-put-to-scope             22.9692+-0.5785           22.3600+-0.3925          might be 1.0272x faster
   infer-closure-const-then-reenter-no-inline   
                                                     44.8476+-0.6212           44.7841+-0.4210        
   infer-closure-const-then-reenter                  22.7558+-0.4858     ?     23.2394+-0.7274        ? might be 1.0212x slower
   infer-constant-global-property                     3.3704+-0.0432     ?      3.3928+-0.0609        ?
   infer-constant-property                            2.6177+-0.0235     ?      2.7779+-0.2446        ? might be 1.0612x slower
   infer-one-time-closure-ten-vars                    7.8377+-0.3884     ?      7.9692+-0.5299        ? might be 1.0168x slower
   infer-one-time-closure-two-vars                    7.3498+-0.0752     ?      7.4298+-0.3353        ? might be 1.0109x slower
   infer-one-time-closure                             7.5201+-0.4085            7.0848+-0.1613          might be 1.0614x faster
   infer-one-time-deep-closure                       10.9701+-0.2998           10.7126+-0.2289          might be 1.0240x faster
   inline-arguments-access                            3.5844+-0.1538     ?      3.6664+-0.1790        ? might be 1.0229x slower
   inline-arguments-aliased-access                    3.6736+-0.2317            3.6265+-0.0557          might be 1.0130x faster
   inline-arguments-local-escape                      3.9170+-0.3672            3.7670+-0.2051          might be 1.0398x faster
   inline-get-scoped-var                              4.5165+-0.1154     ?      4.5360+-0.1271        ?
   inlined-put-by-id-transition                       9.2961+-0.8185     ?      9.4428+-0.5341        ? might be 1.0158x slower
   inlined-put-by-val-with-string-transition   
                                                     42.0168+-1.1972     ?     43.7844+-3.5313        ? might be 1.0421x slower
   inlined-put-by-val-with-symbol-transition   
                                                     42.3346+-1.3820           42.2761+-0.9862        
   int-or-other-abs-then-get-by-val                   4.7492+-0.3413            4.4778+-0.1117          might be 1.0606x faster
   int-or-other-abs-zero-then-get-by-val             15.8073+-0.5929           15.7552+-0.5238        
   int-or-other-add-then-get-by-val                   4.1774+-0.0633     ^      4.0304+-0.0389        ^ definitely 1.0365x faster
   int-or-other-add                                   4.9076+-0.0689     ?      4.9833+-0.2463        ? might be 1.0154x slower
   int-or-other-div-then-get-by-val                   3.7598+-0.0785            3.7453+-0.0733        
   int-or-other-max-then-get-by-val                   3.8940+-0.0651     ?      3.9060+-0.0802        ?
   int-or-other-min-then-get-by-val                   3.8104+-0.0898     ?      3.8372+-0.1706        ?
   int-or-other-mod-then-get-by-val                   3.8776+-0.9246            3.6039+-0.2247          might be 1.0760x faster
   int-or-other-mul-then-get-by-val                   3.6250+-0.0859            3.6041+-0.0287        
   int-or-other-neg-then-get-by-val                   4.0274+-0.0680            4.0029+-0.0750        
   int-or-other-neg-zero-then-get-by-val             15.2208+-0.2043     ?     15.3367+-0.2612        ?
   int-or-other-sub-then-get-by-val                   4.7621+-1.3515            4.0442+-0.0642          might be 1.1775x faster
   int-or-other-sub                                   3.4206+-0.0175     ?      3.4476+-0.0586        ?
   int-overflow-local                                 4.0792+-0.0654            4.0475+-0.0822        
   Int16Array-alloc-long-lived                       47.2630+-1.6321           46.9967+-1.4819        
   Int16Array-bubble-sort-with-byteLength            17.3005+-0.8974           17.1313+-0.4104        
   Int16Array-bubble-sort                            16.9147+-0.4615           16.5849+-0.3364          might be 1.0199x faster
   Int16Array-load-int-mul                            1.4391+-0.0702            1.4312+-0.0443        
   Int16Array-to-Int32Array-set                      56.8430+-20.1768          44.3498+-0.8899          might be 1.2817x faster
   Int32Array-alloc-large                            12.1926+-0.8485     ?     12.3728+-0.3810        ? might be 1.0148x slower
   Int32Array-alloc-long-lived                       55.6529+-1.1868           55.0514+-1.1829          might be 1.0109x faster
   Int32Array-alloc                                   3.2221+-0.7695            2.8369+-0.1858          might be 1.1358x faster
   Int32Array-Int8Array-view-alloc                    5.9669+-0.1284     ?      6.1463+-0.3031        ? might be 1.0301x slower
   int52-spill                                        4.5905+-0.1678            4.5609+-0.1835        
   Int8Array-alloc-long-lived                        41.4351+-1.1068     ?     41.4825+-1.4119        ?
   Int8Array-load-with-byteLength                     3.4350+-0.2105            3.3689+-0.0553          might be 1.0196x faster
   Int8Array-load                                     3.3622+-0.0729     ?      3.4219+-0.1065        ? might be 1.0178x slower
   integer-divide                                    10.3889+-0.1671     ?     10.4047+-0.1493        ?
   integer-modulo                                     1.6092+-0.0525     ?      1.7135+-0.1371        ? might be 1.0648x slower
   is-boolean-fold-tricky                             3.7952+-0.1001            3.7493+-0.0417          might be 1.0123x faster
   is-boolean-fold                                    2.7310+-0.1774            2.6745+-0.0739          might be 1.0211x faster
   is-function-fold-tricky-internal-function   
                                                      9.6697+-0.1846     ^      9.3421+-0.1039        ^ definitely 1.0351x faster
   is-function-fold-tricky                            4.1133+-0.1596     ?      4.1262+-0.1597        ?
   is-function-fold                                   2.6356+-0.0242     ?      2.6606+-0.0399        ?
   is-number-fold-tricky                              3.9150+-0.0597     ?      4.0237+-0.1168        ? might be 1.0278x slower
   is-number-fold                                     2.8237+-0.2890            2.6457+-0.0643          might be 1.0673x faster
   is-object-or-null-fold-functions                   2.6680+-0.0198            2.6405+-0.0337          might be 1.0104x faster
   is-object-or-null-fold-less-tricky                 4.1605+-0.2565     ?      4.3308+-0.3946        ? might be 1.0409x slower
   is-object-or-null-fold-tricky                      4.8619+-0.2009            4.7811+-0.0863          might be 1.0169x faster
   is-object-or-null-fold                             2.8720+-0.5044            2.6563+-0.0468          might be 1.0812x faster
   is-object-or-null-trickier-function                4.1263+-0.2185     ?      4.2554+-0.4450        ? might be 1.0313x slower
   is-object-or-null-trickier-internal-function   
                                                      9.7037+-0.1097     ?      9.9784+-0.4098        ? might be 1.0283x slower
   is-object-or-null-tricky-function                  4.0859+-0.1057            3.9906+-0.0592          might be 1.0239x faster
   is-object-or-null-tricky-internal-function   
                                                      7.6077+-0.5790            7.2156+-0.0550          might be 1.0543x faster
   is-string-fold-tricky                              4.1620+-0.4107            3.9545+-0.0854          might be 1.0525x faster
   is-string-fold                                     2.6166+-0.0221     ?      2.6217+-0.0314        ?
   is-undefined-fold-tricky                           3.3550+-0.0349            3.3256+-0.0856        
   is-undefined-fold                                  2.7866+-0.2652            2.6118+-0.0334          might be 1.0670x faster
   JSONP-negative-0                                   0.2552+-0.0288            0.2481+-0.0087          might be 1.0287x faster
   large-int-captured                                 4.2205+-0.3414            4.0890+-0.1852          might be 1.0322x faster
   large-int-neg                                     14.1271+-0.5233     ?     14.2442+-0.4001        ?
   large-int                                         13.3140+-0.3874           13.1909+-0.5799        
   load-varargs-elimination                          20.3296+-0.3462     ?     20.4649+-0.2723        ?
   logical-not-weird-types                            2.9827+-0.0371     ?      3.0428+-0.0780        ? might be 1.0201x slower
   logical-not                                        4.3944+-0.0445     ?      4.4736+-0.2007        ? might be 1.0180x slower
   lots-of-fields                                     8.8457+-0.2121     !      9.7119+-0.4546        ! definitely 1.0979x slower
   make-indexed-storage                               2.8498+-0.1140     ?      2.8546+-0.2331        ?
   make-rope-cse                                      3.6681+-0.0996            3.6257+-0.0853          might be 1.0117x faster
   marsaglia-larger-ints                             32.3426+-0.9767           31.7346+-0.5387          might be 1.0192x faster
   marsaglia-osr-entry                               21.1767+-0.5042     ?     21.7398+-0.8062        ? might be 1.0266x slower
   math-with-out-of-bounds-array-values              21.2525+-0.3417     ?     21.5648+-0.3727        ? might be 1.0147x slower
   max-boolean                                        2.5870+-0.0218            2.5854+-0.0320        
   method-on-number                                  15.4821+-0.1861     ?     15.7819+-0.4661        ? might be 1.0194x slower
   min-boolean                                        2.6347+-0.0644            2.5722+-0.0240          might be 1.0243x faster
   minus-boolean-double                               3.0699+-0.0281            3.0576+-0.0280        
   minus-boolean                                      2.3146+-0.0541     ?      2.3328+-0.0375        ?
   misc-strict-eq                                    28.5292+-0.7565     ?     28.8959+-1.0290        ? might be 1.0129x slower
   mod-boolean-double                                11.0106+-0.1432     ?     11.2087+-0.4314        ? might be 1.0180x slower
   mod-boolean                                        8.2936+-0.1792            8.2680+-0.0887        
   mul-boolean-double                                 3.6155+-0.0328            3.6015+-0.0511        
   mul-boolean                                        2.7650+-0.0355     ?      2.8200+-0.0727        ? might be 1.0199x slower
   neg-boolean                                        3.0625+-0.0486     ?      3.1330+-0.0912        ? might be 1.0230x slower
   negative-zero-divide                               0.3619+-0.0267            0.3601+-0.0578        
   negative-zero-modulo                               0.3296+-0.0213     ?      0.3776+-0.1016        ? might be 1.1456x slower
   negative-zero-negate                               0.3364+-0.0327            0.3330+-0.0187          might be 1.0103x faster
   nested-function-parsing                           44.9096+-0.4937     ?     45.2174+-0.7220        ?
   new-array-buffer-dead                             87.2598+-0.8165     ?     87.9518+-1.1456        ?
   new-array-buffer-push                              6.2701+-0.3388            6.1367+-0.2126          might be 1.0217x faster
   new-array-dead                                    15.7499+-0.4377           15.2573+-0.6562          might be 1.0323x faster
   new-array-push                                     3.4451+-0.0845     ?      3.5808+-0.1713        ? might be 1.0394x slower
   no-inline-constructor                             31.4798+-0.7483           31.2064+-0.7996        
   number-test                                        3.0825+-0.1460     ?      3.1673+-0.3014        ? might be 1.0275x slower
   object-closure-call                                5.2546+-0.2382            5.1404+-0.2353          might be 1.0222x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.2432+-0.4389            4.2310+-0.1665        
   object-test                                        2.7614+-0.0383     ?      2.8503+-0.2657        ? might be 1.0322x slower
   obvious-sink-pathology-taken                      98.2146+-0.4998     ?     98.9673+-0.9870        ?
   obvious-sink-pathology                            94.6472+-2.9624           94.3766+-1.0083        
   obviously-elidable-new-object                     28.8225+-1.1079           28.6124+-0.7996        
   plus-boolean-arith                                 2.4198+-0.0909            2.3831+-0.0764          might be 1.0154x faster
   plus-boolean-double                                3.2399+-0.2349            3.0991+-0.0665          might be 1.0454x faster
   plus-boolean                                       2.5147+-0.0202     ?      2.5215+-0.0824        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.2129+-0.0339     ?      3.2605+-0.1140        ? might be 1.0148x slower
   poly-chain-access-different-prototypes             3.4951+-0.4574            3.2688+-0.0383          might be 1.0692x faster
   poly-chain-access-simpler                          3.2435+-0.1635     ?      3.2728+-0.0668        ?
   poly-chain-access                                  3.4103+-0.3115            3.2807+-0.0745          might be 1.0395x faster
   poly-stricteq                                     50.2519+-0.7779     ?     54.5121+-10.9504       ? might be 1.0848x slower
   polymorphic-array-call                             1.2140+-0.0656     ?      1.2923+-0.0578        ? might be 1.0645x slower
   polymorphic-get-by-id                              2.8390+-0.0945            2.8358+-0.0633        
   polymorphic-put-by-id                             28.4326+-0.8798     ?     28.8254+-1.6172        ? might be 1.0138x slower
   polymorphic-put-by-val-with-string                28.4671+-1.2600           28.1255+-0.8196          might be 1.0121x faster
   polymorphic-put-by-val-with-symbol                28.3532+-0.7375           28.0122+-0.7486          might be 1.0122x faster
   polymorphic-structure                             13.3037+-0.7050           12.6111+-0.4073          might be 1.0549x faster
   polyvariant-monomorphic-get-by-id                  7.0004+-0.7264     ?      7.0975+-0.9503        ? might be 1.0139x slower
   proto-getter-access                                8.3029+-0.2266     ?      8.3607+-0.1487        ?
   prototype-access-with-mutating-prototype           5.3680+-0.0955     ?      5.4576+-0.1688        ? might be 1.0167x slower
   put-by-id-replace-and-transition                   8.2173+-0.5292            7.7328+-0.6229          might be 1.0627x faster
   put-by-id-slightly-polymorphic                     2.6937+-0.1981     ?      2.8078+-0.3419        ? might be 1.0424x slower
   put-by-id                                          9.6949+-0.3689     ?     10.5410+-1.5546        ? might be 1.0873x slower
   put-by-val-direct                                  0.3545+-0.0434     ?      0.4512+-0.1937        ? might be 1.2729x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.6454+-0.4484            5.4767+-0.0938          might be 1.0308x faster
   put-by-val-machine-int                             2.6420+-0.1464            2.5577+-0.1053          might be 1.0329x faster
   put-by-val-with-string-replace-and-transition   
                                                     10.3070+-0.5493     ?     10.5470+-0.5860        ? might be 1.0233x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      3.0268+-0.3346            2.8661+-0.0590          might be 1.0561x faster
   put-by-val-with-string                            10.4149+-0.3574     ?     11.4967+-1.8582        ? might be 1.1039x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     12.0017+-0.4439           11.9598+-0.7083        
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.1986+-0.0968            3.1432+-0.0301          might be 1.0176x faster
   put-by-val-with-symbol                            10.4873+-0.4274           10.3170+-0.3656          might be 1.0165x faster
   rare-osr-exit-on-local                            13.6107+-0.1393           13.4398+-0.2670          might be 1.0127x faster
   register-pressure-from-osr                        17.6605+-0.5441     ^     16.7320+-0.3334        ^ definitely 1.0555x faster
   repeat-multi-get-by-offset                        21.9933+-0.4557           20.9397+-0.7693          might be 1.0503x faster
   setter-prototype                                   7.5709+-0.0595     ?      7.7887+-0.2615        ? might be 1.0288x slower
   setter                                             5.7907+-0.7243            5.5689+-0.5711          might be 1.0398x faster
   simple-activation-demo                            24.6304+-0.5532           24.4910+-1.1713        
   simple-getter-access                              11.2278+-1.1876           10.7763+-0.2052          might be 1.0419x faster
   simple-poly-call-nested                            8.6622+-0.5060     ?      8.8309+-0.4756        ? might be 1.0195x slower
   simple-poly-call                                   1.3475+-0.2147            1.3026+-0.0981          might be 1.0345x faster
   sin-boolean                                       21.1088+-1.5999           20.7724+-1.3556          might be 1.0162x faster
   singleton-scope                                   55.6290+-0.6432     ?     56.3892+-0.6442        ? might be 1.0137x slower
   sink-function                                     10.1957+-0.8361     ?     11.5894+-2.5810        ? might be 1.1367x slower
   sink-huge-activation                              17.2687+-0.5716           16.9765+-0.8272          might be 1.0172x faster
   sinkable-new-object-dag                           54.1818+-2.3263     ?     55.2975+-2.7790        ? might be 1.0206x slower
   sinkable-new-object-taken                         44.2835+-1.1100     ?     44.6409+-0.9252        ?
   sinkable-new-object                               29.9977+-0.5132           29.8000+-0.7123        
   slow-array-profile-convergence                     2.4892+-0.1482            2.4558+-0.0531          might be 1.0136x faster
   slow-convergence                                   2.3258+-0.0129     ?      2.4157+-0.1944        ? might be 1.0387x slower
   slow-ternaries                                    18.6867+-2.7090           17.7903+-1.1302          might be 1.0504x faster
   sorting-benchmark                                 16.9830+-0.6257           16.7650+-0.4607          might be 1.0130x faster
   sparse-conditional                                 1.1466+-0.0255     ?      1.1566+-0.0595        ?
   splice-to-remove                                  12.1070+-0.2887     ?     12.1998+-0.2102        ?
   string-char-code-at                               13.0139+-0.2578           12.8115+-0.2038          might be 1.0158x faster
   string-concat-object                               2.2356+-0.1212            2.2006+-0.1506          might be 1.0159x faster
   string-concat-pair-object                          2.2146+-0.1225     ?      2.4526+-0.3699        ? might be 1.1075x slower
   string-concat-pair-simple                          9.2794+-0.3734     ?      9.9085+-0.6272        ? might be 1.0678x slower
   string-concat-simple                               9.9892+-0.4472            9.6035+-0.4529          might be 1.0402x faster
   string-cons-repeat                                 7.0335+-0.7329            6.6205+-0.6618          might be 1.0624x faster
   string-cons-tower                                  6.7029+-0.3549     ?      6.7058+-0.3042        ?
   string-equality                                   14.8603+-0.2069           14.8358+-0.1479        
   string-get-by-val-big-char                         6.5475+-0.1068            6.5198+-0.1239        
   string-get-by-val-out-of-bounds-insane             3.1256+-0.0655     ?      3.1882+-0.2827        ? might be 1.0200x slower
   string-get-by-val-out-of-bounds                    3.8898+-0.0840            3.8773+-0.0511        
   string-get-by-val                                  2.8253+-0.1511            2.7980+-0.0312        
   string-hash                                        1.8631+-0.0636            1.8445+-0.0761          might be 1.0101x faster
   string-long-ident-equality                        12.9726+-0.1506     ?     12.9995+-0.2028        ?
   string-out-of-bounds                              10.0300+-0.3182     ?     10.1510+-0.2220        ? might be 1.0121x slower
   string-repeat-arith                               25.8796+-0.4607     !     27.0114+-0.4602        ! definitely 1.0437x slower
   string-sub                                        54.2256+-1.4278     ?     56.4030+-2.2070        ? might be 1.0402x slower
   string-test                                        2.9397+-0.1204            2.8784+-0.1429          might be 1.0213x faster
   string-var-equality                               26.8928+-1.0550           26.1954+-0.2288          might be 1.0266x faster
   structure-hoist-over-transitions                   2.4105+-0.2529            2.3530+-0.1179          might be 1.0244x faster
   substring-concat-weird                            36.1540+-0.9641           35.8641+-1.0046        
   substring-concat                                  40.0718+-1.9293     ?     40.7859+-1.7083        ? might be 1.0178x slower
   substring                                         45.4316+-1.1906     ?     46.0712+-1.0491        ? might be 1.0141x slower
   switch-char-constant                               2.7558+-0.2119            2.6687+-0.0717          might be 1.0326x faster
   switch-char                                        6.1469+-0.7855            5.4218+-0.2547          might be 1.1337x faster
   switch-constant                                    9.3231+-0.3900            8.7255+-0.7661          might be 1.0685x faster
   switch-string-basic-big-var                       14.2144+-0.2104     ?     14.7147+-0.6433        ? might be 1.0352x slower
   switch-string-basic-big                           15.0564+-0.4078           14.9639+-0.4952        
   switch-string-basic-var                           13.7571+-0.3284           13.6036+-0.4160          might be 1.0113x faster
   switch-string-basic                               12.6897+-0.3405           12.4093+-0.1664          might be 1.0226x faster
   switch-string-big-length-tower-var                17.9904+-0.2933     ?     18.0975+-0.4954        ?
   switch-string-length-tower-var                    13.0660+-0.3670           13.0508+-0.3167        
   switch-string-length-tower                        11.4669+-0.2992     ?     11.6501+-0.2268        ? might be 1.0160x slower
   switch-string-short                               11.2619+-0.1470     ?     11.4160+-0.2373        ? might be 1.0137x slower
   switch                                            10.9872+-0.5257     ?     11.2272+-0.6557        ? might be 1.0218x slower
   tear-off-arguments-simple                          3.1823+-0.1551            3.0855+-0.1438          might be 1.0314x faster
   tear-off-arguments                                 4.0500+-0.0942            4.0186+-0.1247        
   temporal-structure                                12.0714+-0.5155           11.6929+-0.2702          might be 1.0324x faster
   to-int32-boolean                                  12.6377+-0.3849     ?     12.7692+-0.3727        ? might be 1.0104x slower
   try-catch-get-by-val-cloned-arguments             13.7059+-0.2732     ?     14.2403+-0.4656        ? might be 1.0390x slower
   try-catch-get-by-val-direct-arguments              6.3293+-0.1316     ?      6.4584+-0.2735        ? might be 1.0204x slower
   try-catch-get-by-val-scoped-arguments              7.8473+-0.0659            7.5740+-0.2238          might be 1.0361x faster
   typed-array-get-set-by-val-profiling              28.2184+-1.5252           27.4100+-1.0152          might be 1.0295x faster
   undefined-property-access                        224.4266+-1.9747     ^    215.9747+-0.7775        ^ definitely 1.0391x faster
   undefined-test                                     3.0668+-0.1341            3.0042+-0.0866          might be 1.0208x faster
   unprofiled-licm                                   13.6879+-0.2591     ^      9.6975+-0.8975        ^ definitely 1.4115x faster
   varargs-call                                      13.1685+-0.3131     ?     13.3662+-0.5337        ? might be 1.0150x slower
   varargs-construct-inline                          21.8319+-0.5745           21.6925+-0.4184        
   varargs-construct                                 19.7384+-0.2127     ?     19.8718+-0.3292        ?
   varargs-inline                                     8.6916+-0.1746     ?      8.9851+-0.4015        ? might be 1.0338x slower
   varargs-strict-mode                                9.5021+-0.1170     ?      9.7660+-0.7597        ? might be 1.0278x slower
   varargs                                            9.6411+-0.2983            9.6282+-0.3530        
   weird-inlining-const-prop                          2.1598+-0.1052     ?      2.1880+-0.1765        ? might be 1.0131x slower

   &lt;geometric&gt;                                        7.9406+-0.0271            7.9233+-0.0260          might be 1.0022x faster

                                                        TipOfTree             PropTypeInference                                 
AsmBench:
   bigfib.cpp                                       445.6295+-6.3191     ?    456.6078+-6.8338        ? might be 1.0246x slower
   cray.c                                           414.5247+-50.4765         390.4744+-1.3718          might be 1.0616x faster
   dry.c                                            425.0297+-7.1072          419.2015+-6.9705          might be 1.0139x faster
   FloatMM.c                                        680.5083+-1.5857     ?    682.1187+-3.7260        ?
   gcc-loops.cpp                                   3410.4165+-8.8511         3405.7317+-6.4612        
   n-body.c                                         820.9221+-1.7417     ?    821.1677+-3.5436        ?
   Quicksort.c                                      405.4785+-2.6890          404.4405+-4.5563        
   stepanov_container.cpp                          3469.2711+-13.9779    ?   3490.1951+-22.9585       ?
   Towers.c                                         233.9452+-4.3522          232.3153+-0.8717        

   &lt;geometric&gt;                                      715.0234+-8.1584          711.5162+-2.2886          might be 1.0049x faster

                                                        TipOfTree             PropTypeInference                                 
CompressionBench:
   huffman                                           61.1774+-0.9324           61.1209+-1.1611        
   arithmetic-simple                                282.7768+-29.9651         269.4106+-0.7516          might be 1.0496x faster
   arithmetic-precise                               242.4166+-2.7698          241.3868+-1.4367        
   arithmetic-complex-precise                       243.4485+-4.5442          242.0727+-1.4858        
   arithmetic-precise-order-0                       278.8811+-1.4633          277.8895+-0.3913        
   arithmetic-precise-order-1                       294.3374+-1.2475          294.1070+-0.8609        
   arithmetic-precise-order-2                       344.1716+-3.7321     ?    344.7427+-6.4314        ?
   arithmetic-simple-order-1                        317.0632+-0.7942     ?    317.1623+-2.6656        ?
   arithmetic-simple-order-2                        366.9575+-4.1691          366.2957+-4.0739        
   lz-string                                        315.7057+-3.1909          311.3489+-3.9630          might be 1.0140x faster

   &lt;geometric&gt;                                      252.4959+-2.9546          250.6809+-0.7604          might be 1.0072x faster

                                                        TipOfTree             PropTypeInference                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                                   51.0509+-0.1883     ^     49.6831+-0.1183        ^ definitely 1.0275x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126501</commentid>
    <comment_count>32</comment_count>
      <attachid>261334</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-16 16:04:00 -0700</bug_when>
    <thetext>Created attachment 261334
work in progress

This is already showing huge speed-ups but I still have bugs to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126822</commentid>
    <comment_count>33</comment_count>
      <attachid>261417</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-17 13:53:49 -0700</bug_when>
    <thetext>Created attachment 261417
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126824</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 13:56:43 -0700</bug_when>
    <thetext>Attachment 261417 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. &quot;runtime/InferredType.cpp&quot; should be before &quot;runtime/InferredValue.cpp&quot;.  [list/order] [5]
Total errors found: 12 in 67 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>1126853</commentid>
    <comment_count>35</comment_count>
      <attachid>261417</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-17 14:33:24 -0700</bug_when>
    <thetext>Comment on attachment 261417
the patch

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

r=me

Please fix EWS.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5247
&gt; +        std::unique_ptr&lt;GPRTemporary&gt; structure;

Can we just use WTF::Optional here?

&gt; Source/JavaScriptCore/runtime/InferredTypeTable.h:36
&gt; +// destructor and makes lifetype easier to manage. For example, since it&apos;s a cell, we know that this thing

lifetype=&gt;lifetime

&gt; Source/JavaScriptCore/runtime/InferredTypeTable.h:92
&gt; +    // (transition), then absence means bottom. If we&apos;re storing to an existing property (replace, then

(replace =&gt; (replace)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126857</commentid>
    <comment_count>36</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-17 14:36:12 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Comment on attachment 261417 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261417&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; Please fix EWS.

Working on it!

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5247
&gt; &gt; +        std::unique_ptr&lt;GPRTemporary&gt; structure;
&gt; 
&gt; Can we just use WTF::Optional here?

I&apos;ll try!

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/InferredTypeTable.h:36
&gt; &gt; +// destructor and makes lifetype easier to manage. For example, since it&apos;s a cell, we know that this thing
&gt; 
&gt; lifetype=&gt;lifetime

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/InferredTypeTable.h:92
&gt; &gt; +    // (transition), then absence means bottom. If we&apos;re storing to an existing property (replace, then
&gt; 
&gt; (replace =&gt; (replace)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126862</commentid>
    <comment_count>37</comment_count>
      <attachid>261429</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-17 14:39:50 -0700</bug_when>
    <thetext>Created attachment 261429
the patch

Fixes for EWS and to address ggaren&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126865</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 14:42:40 -0700</bug_when>
    <thetext>Attachment 261429 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. &quot;runtime/InferredType.cpp&quot; should be before &quot;runtime/InferredValue.cpp&quot;.  [list/order] [5]
Total errors found: 12 in 67 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>1127045</commentid>
    <comment_count>39</comment_count>
      <attachid>261483</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-17 21:34:59 -0700</bug_when>
    <thetext>Created attachment 261483
the patch

More build fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127046</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 21:38:31 -0700</bug_when>
    <thetext>Attachment 261483 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. &quot;runtime/InferredType.cpp&quot; should be before &quot;runtime/InferredValue.cpp&quot;.  [list/order] [5]
Total errors found: 12 in 67 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>1127062</commentid>
    <comment_count>41</comment_count>
      <attachid>261488</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-17 22:12:28 -0700</bug_when>
    <thetext>Created attachment 261488
the patch

Fixed 32-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127063</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 22:14:18 -0700</bug_when>
    <thetext>Attachment 261488 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:500:  Alphabetical sorting problem. &quot;runtime/InferredType.cpp&quot; should be before &quot;runtime/InferredValue.cpp&quot;.  [list/order] [5]
Total errors found: 12 in 67 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>1127706</commentid>
    <comment_count>43</comment_count>
      <attachid>261675</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 12:09:40 -0700</bug_when>
    <thetext>Created attachment 261675
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127707</commentid>
    <comment_count>44</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 12:10:23 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; Created attachment 261675 [details]
&gt; patch for landing

Actually, I probably have a few more style things to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127711</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-21 12:12:36 -0700</bug_when>
    <thetext>Attachment 261675 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2043:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2063:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashTable.h:289:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.cpp:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:1120:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:215:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/InferredType.h:218:  The parameter name &quot;locker&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:505:  Alphabetical sorting problem. &quot;runtime/InferredType.cpp&quot; should be before &quot;runtime/InferredValue.cpp&quot;.  [list/order] [5]
Total errors found: 12 in 78 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>1127712</commentid>
    <comment_count>46</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 12:13:47 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; Comment on attachment 261417 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=261417&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; Please fix EWS.
&gt; 
&gt; Working on it!
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5247
&gt; &gt; &gt; +        std::unique_ptr&lt;GPRTemporary&gt; structure;
&gt; &gt; 
&gt; &gt; Can we just use WTF::Optional here?
&gt; 
&gt; I&apos;ll try!

Seems like WTF::Optional is a bit less nice than std::unique_ptr here.  The problem is that GPRTemporary and friends don&apos;t understand move semantics.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/InferredTypeTable.h:36
&gt; &gt; &gt; +// destructor and makes lifetype easier to manage. For example, since it&apos;s a cell, we know that this thing
&gt; &gt; 
&gt; &gt; lifetype=&gt;lifetime
&gt; 
&gt; Fixed.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/InferredTypeTable.h:92
&gt; &gt; &gt; +    // (transition), then absence means bottom. If we&apos;re storing to an existing property (replace, then
&gt; &gt; 
&gt; &gt; (replace =&gt; (replace)
&gt; 
&gt; Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127729</commentid>
    <comment_count>47</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 13:06:02 -0700</bug_when>
    <thetext>Performance numbers of rebased/fixed patch:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190059)
&quot;PropTypeInference&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190059)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree             PropTypeInference                                 
SunSpider:
   3d-cube                                            4.7428+-0.6027     ?      4.7881+-0.3438        ?
   3d-morph                                           5.3899+-0.4131            5.2757+-0.3096          might be 1.0216x faster
   3d-raytrace                                        5.1612+-0.1125     ?      5.3435+-0.3846        ? might be 1.0353x slower
   access-binary-trees                                2.0806+-0.0929     ?      2.0895+-0.0980        ?
   access-fannkuch                                    5.6501+-0.3192            5.5453+-0.3887          might be 1.0189x faster
   access-nbody                                       2.4732+-0.1931     ?      2.6016+-0.2697        ? might be 1.0519x slower
   access-nsieve                                      2.9972+-0.0649     ?      3.0012+-0.0459        ?
   bitops-3bit-bits-in-byte                           1.1775+-0.0642     ?      1.1804+-0.0881        ?
   bitops-bits-in-byte                                3.4649+-0.6345            3.1764+-0.0295          might be 1.0909x faster
   bitops-bitwise-and                                 2.0213+-0.0670            2.0000+-0.0557          might be 1.0107x faster
   bitops-nsieve-bits                                 2.9753+-0.0879            2.9705+-0.0323        
   controlflow-recursive                              2.2998+-0.1100     ?      2.3708+-0.2268        ? might be 1.0309x slower
   crypto-aes                                         4.0861+-0.2577            3.8636+-0.1042          might be 1.0576x faster
   crypto-md5                                         2.4433+-0.0825     ?      2.4772+-0.0490        ? might be 1.0139x slower
   crypto-sha1                                        2.4228+-0.1835     ?      2.5243+-0.1973        ? might be 1.0419x slower
   date-format-tofte                                  6.8379+-0.5738     ?      7.0383+-0.3589        ? might be 1.0293x slower
   date-format-xparb                                  4.6060+-0.1854     ?      4.6276+-0.1156        ?
   math-cordic                                        2.8149+-0.0647            2.7980+-0.0810        
   math-partial-sums                                  5.1778+-1.0129            4.8067+-0.1006          might be 1.0772x faster
   math-spectral-norm                                 1.8640+-0.0211     ?      1.9270+-0.0778        ? might be 1.0338x slower
   regexp-dna                                         6.4928+-0.3693            6.4168+-0.2384          might be 1.0118x faster
   string-base64                                      4.6406+-0.2646     ?      4.6528+-0.3587        ?
   string-fasta                                       5.8877+-0.2278            5.8011+-0.1346          might be 1.0149x faster
   string-tagcloud                                    7.8036+-0.1621     ?      7.8427+-0.0889        ?
   string-unpack-code                                18.6976+-0.4090     ^     17.8575+-0.2819        ^ definitely 1.0470x faster
   string-validate-input                              4.6159+-0.2063     ?      4.7290+-0.4749        ? might be 1.0245x slower

   &lt;arithmetic&gt;                                       4.5702+-0.0687            4.5271+-0.0522          might be 1.0095x faster

                                                        TipOfTree             PropTypeInference                                 
LongSpider:
   3d-cube                                          808.3922+-7.5296          800.5357+-7.1386        
   3d-morph                                        1496.5264+-29.6262        1484.9765+-5.8968        
   3d-raytrace                                      594.7610+-12.5181         594.3466+-8.0207        
   access-binary-trees                              802.4530+-6.2678     ?    803.2994+-7.4199        ?
   access-fannkuch                                  273.5359+-4.7797     ?    274.4207+-5.5666        ?
   access-nbody                                     508.0145+-11.4747         506.0303+-1.9341        
   access-nsieve                                    359.5817+-1.8110     ?    362.9360+-10.1494       ?
   bitops-3bit-bits-in-byte                          34.1751+-0.5839           33.5027+-0.1939          might be 1.0201x faster
   bitops-bits-in-byte                               76.3990+-1.9102           74.6802+-1.5706          might be 1.0230x faster
   bitops-nsieve-bits                               406.2599+-15.1556         400.8208+-3.5662          might be 1.0136x faster
   controlflow-recursive                            423.9346+-2.5188     ?    425.5837+-6.3849        ?
   crypto-aes                                       565.1296+-2.4617          555.4758+-12.5875         might be 1.0174x faster
   crypto-md5                                       431.8547+-2.3074     ?    444.2644+-29.7342       ? might be 1.0287x slower
   crypto-sha1                                      640.2647+-16.0862         627.4917+-13.6221         might be 1.0204x faster
   date-format-tofte                                500.1413+-6.8873          492.5465+-4.7863          might be 1.0154x faster
   date-format-xparb                                657.0205+-2.5252          653.5280+-3.7157        
   hash-map                                         151.1997+-1.0504          149.0120+-1.4363          might be 1.0147x faster
   math-cordic                                      475.0708+-1.4689     ?    480.3130+-15.2602       ? might be 1.0110x slower
   math-partial-sums                                460.3826+-1.7658          457.7976+-10.3462       
   math-spectral-norm                               546.4360+-2.1050          546.4219+-1.3553        
   string-base64                                    349.1503+-5.0129     ?    351.6608+-11.0910       ?
   string-fasta                                     361.1235+-1.0005     ?    363.8851+-3.8400        ?
   string-tagcloud                                  174.9200+-2.7001     ?    175.9580+-3.8409        ?

   &lt;geometric&gt;                                      383.3689+-1.2943          382.0263+-2.6859          might be 1.0035x faster

                                                        TipOfTree             PropTypeInference                                 
V8Spider:
   crypto                                            48.5835+-2.0303           47.0136+-0.8406          might be 1.0334x faster
   deltablue                                         89.0227+-5.2123     ^     78.6388+-2.1744        ^ definitely 1.1320x faster
   earley-boyer                                      40.8271+-1.4930     ?     42.6728+-1.9986        ? might be 1.0452x slower
   raytrace                                          32.2310+-1.2260     ?     32.3558+-2.6326        ?
   regexp                                            63.6097+-2.7093           62.5983+-1.9897          might be 1.0162x faster
   richards                                          63.0675+-1.7312     ^     53.1778+-1.0904        ^ definitely 1.1860x faster
   splay                                             33.5918+-1.7520     ?     35.6288+-1.3411        ? might be 1.0606x slower

   &lt;geometric&gt;                                       49.8383+-0.8573           48.1899+-1.2272          might be 1.0342x faster

                                                        TipOfTree             PropTypeInference                                 
Octane:
   encrypt                                           0.16956+-0.00120    ^     0.16388+-0.00210       ^ definitely 1.0346x faster
   decrypt                                           3.02277+-0.01049    ^     2.89974+-0.01705       ^ definitely 1.0424x faster
   deltablue                                x2       0.16029+-0.00564          0.14390+-0.01596         might be 1.1139x faster
   earley                                            0.30094+-0.00498    ?     0.30431+-0.00306       ? might be 1.0112x slower
   boyer                                             4.31720+-0.08120    ?     4.62621+-0.72195       ? might be 1.0716x slower
   navier-stokes                            x2       4.81361+-0.03433          4.80543+-0.02804       
   raytrace                                 x2       0.89267+-0.00633    ^     0.85912+-0.00810       ^ definitely 1.0391x faster
   richards                                 x2       0.10694+-0.00129    ^     0.08817+-0.00053       ^ definitely 1.2129x faster
   splay                                    x2       0.32715+-0.00327    ?     0.32947+-0.00407       ?
   regexp                                   x2      25.07377+-0.40042         24.77031+-0.19539         might be 1.0123x faster
   pdfjs                                    x2      37.08916+-0.55000         36.33195+-0.24799         might be 1.0208x faster
   mandreel                                 x2      42.78122+-0.80838         42.12141+-0.35107         might be 1.0157x faster
   gbemu                                    x2      32.38523+-0.11773    ^    31.13536+-0.54316       ^ definitely 1.0401x faster
   closure                                           0.57394+-0.00971    ?     0.57419+-0.00362       ?
   jquery                                            7.09461+-0.03367    !     7.26501+-0.05984       ! definitely 1.0240x slower
   box2d                                    x2      10.07767+-0.11998    ^     9.05855+-0.06708       ^ definitely 1.1125x faster
   zlib                                     x2     380.47413+-13.08656   ?   385.03022+-10.23500      ? might be 1.0120x slower
   typescript                               x2     632.98865+-6.10096    ?   646.79846+-8.86919       ? might be 1.0218x slower

   &lt;geometric&gt;                                       5.48956+-0.02837    ^     5.31410+-0.05270       ^ definitely 1.0330x faster

                                                        TipOfTree             PropTypeInference                                 
Kraken:
   ai-astar                                          219.049+-1.552      ^     126.233+-2.397         ^ definitely 1.7353x faster
   audio-beat-detection                               50.545+-0.246             50.129+-0.531         
   audio-dft                                          96.274+-3.235             95.157+-0.445           might be 1.0117x faster
   audio-fft                                          35.131+-0.434      ?      35.233+-1.092         ?
   audio-oscillator                                   60.786+-0.942      ^      55.981+-1.139         ^ definitely 1.0858x faster
   imaging-darkroom                                   60.560+-0.176      ^      59.760+-0.268         ^ definitely 1.0134x faster
   imaging-desaturate                                 48.457+-0.345      ?      48.818+-2.413         ?
   imaging-gaussian-blur                              85.253+-0.780             85.098+-0.632         
   json-parse-financial                               39.249+-1.673             38.007+-0.904           might be 1.0327x faster
   json-stringify-tinderbox                           22.360+-0.562      ?      22.455+-1.023         ?
   stanford-crypto-aes                                40.038+-1.131      ?      40.597+-1.497         ? might be 1.0140x slower
   stanford-crypto-ccm                                36.181+-2.567             35.970+-1.110         
   stanford-crypto-pbkdf2                             92.340+-0.794      ?      95.338+-3.119         ? might be 1.0325x slower
   stanford-crypto-sha256-iterative                   36.227+-0.734             36.172+-0.763         

   &lt;arithmetic&gt;                                       65.889+-0.576      ^      58.925+-0.242         ^ definitely 1.1182x faster

                                                        TipOfTree             PropTypeInference                                 
JSRegress:
   abc-forward-loop-equal                            29.2559+-0.5414           29.1943+-0.8502        
   abc-postfix-backward-loop                         29.2917+-0.9783           29.2782+-0.7544        
   abc-simple-backward-loop                          29.0842+-0.5607     ?     29.3294+-0.4276        ?
   abc-simple-forward-loop                           28.9221+-1.0819     ?     29.1674+-0.7069        ?
   abc-skippy-loop                                   21.1955+-0.8817           20.9233+-0.4589          might be 1.0130x faster
   abs-boolean                                        2.5147+-0.1280            2.4414+-0.1156          might be 1.0300x faster
   adapt-to-double-divide                            16.2664+-0.3687     ?     16.6285+-0.6643        ? might be 1.0223x slower
   aliased-arguments-getbyval                         1.1921+-0.1033     ?      1.3047+-0.3015        ? might be 1.0944x slower
   allocate-big-object                                2.8940+-0.5850            2.5646+-0.2428          might be 1.1284x faster
   arguments-named-and-reflective                    11.0823+-1.4811           10.6854+-0.2848          might be 1.0371x faster
   arguments-out-of-bounds                            9.1888+-0.5045     ?      9.5485+-0.8752        ? might be 1.0391x slower
   arguments-strict-mode                              9.7758+-0.4480            9.5412+-0.1857          might be 1.0246x faster
   arguments                                          8.4133+-0.2543            8.3153+-0.1561          might be 1.0118x faster
   arity-mismatch-inlining                            0.8627+-0.0393     ?      0.8630+-0.0731        ?
   array-access-polymorphic-structure                 5.8049+-0.2512     !      7.3947+-0.8358        ! definitely 1.2739x slower
   array-nonarray-polymorhpic-access                 23.5650+-0.9905     ?     23.6554+-1.1436        ?
   array-prototype-every                             74.6295+-1.0537     ?     75.6181+-1.0107        ? might be 1.0132x slower
   array-prototype-forEach                           75.6641+-2.0051           74.1990+-1.2999          might be 1.0197x faster
   array-prototype-map                               80.1168+-1.1450     ?     80.8711+-0.9698        ?
   array-prototype-reduce                            70.3433+-0.8294     ?     74.7786+-4.4773        ? might be 1.0631x slower
   array-prototype-reduceRight                       71.1724+-1.9850     ?     74.3874+-4.1505        ? might be 1.0452x slower
   array-prototype-some                              76.2527+-1.5043     ?     77.0946+-2.9468        ? might be 1.0110x slower
   array-splice-contiguous                           20.5249+-1.0988     ?     21.8825+-1.3153        ? might be 1.0661x slower
   array-with-double-add                              3.3869+-0.0803            3.3674+-0.0418        
   array-with-double-increment                        3.0929+-0.0882            3.0852+-0.1588        
   array-with-double-mul-add                          4.1794+-0.1136     ?      4.2128+-0.1387        ?
   array-with-double-sum                              3.2036+-0.0660            3.1860+-0.0764        
   array-with-int32-add-sub                           5.6458+-0.0993     ?      5.6866+-0.1320        ?
   array-with-int32-or-double-sum                     3.2581+-0.0858            3.2498+-0.0829        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.4689+-0.3942     ?     26.2404+-1.0540        ? might be 1.0303x slower
   ArrayBuffer-DataView-alloc-long-lived             11.7254+-0.3666     ?     11.9897+-0.2895        ? might be 1.0225x slower
   ArrayBuffer-Int32Array-byteOffset                  3.5431+-0.1337     ?      3.8325+-0.4277        ? might be 1.0817x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     26.0218+-1.6645     ?     26.8368+-1.4875        ? might be 1.0313x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.9666+-1.8102           19.1589+-0.4815          might be 1.0422x faster
   ArrayBuffer-Int8Array-alloc-long-lived            11.9658+-1.8782           11.3262+-0.4678          might be 1.0565x faster
   ArrayBuffer-Int8Array-alloc                        9.4832+-0.4530     ?      9.6635+-0.5912        ? might be 1.0190x slower
   arrowfunction-call                                10.8002+-0.6699           10.5736+-0.2023          might be 1.0214x faster
   asmjs_bool_bug                                     7.3823+-0.0788     ?      7.3825+-0.0671        ?
   assign-custom-setter-polymorphic                   2.5249+-0.3004            2.4854+-0.0909          might be 1.0159x faster
   assign-custom-setter                               3.2089+-0.0251     ?      3.4916+-0.4527        ? might be 1.0881x slower
   basic-set                                          7.6571+-0.4739            7.5033+-0.4606          might be 1.0205x faster
   big-int-mul                                        3.5081+-0.0712     ?      3.5909+-0.3403        ? might be 1.0236x slower
   boolean-test                                       3.0339+-0.0730     ?      3.0942+-0.1166        ? might be 1.0199x slower
   branch-fold                                        3.7389+-0.1589            3.5923+-0.0552          might be 1.0408x faster
   branch-on-string-as-boolean                       16.8508+-0.5096     ?     16.9028+-0.8097        ?
   by-val-generic                                     2.8080+-0.7179            2.4610+-0.1043          might be 1.1410x faster
   call-spread-apply                                 28.0340+-2.9220           27.2805+-2.0488          might be 1.0276x faster
   call-spread-call                                  21.3276+-0.5595           21.2303+-0.8187        
   captured-assignments                               0.4249+-0.0288            0.4111+-0.0228          might be 1.0338x faster
   cast-int-to-double                                 5.1431+-0.2211     ?      5.2274+-0.1357        ? might be 1.0164x slower
   cell-argument                                      6.4918+-0.4377            5.8654+-0.3900          might be 1.1068x faster
   cfg-simplify                                       2.8495+-0.0615     ?      2.9009+-0.1126        ? might be 1.0180x slower
   chain-getter-access                                8.3563+-0.2787     ?      8.4617+-0.2886        ? might be 1.0126x slower
   cmpeq-obj-to-obj-other                            13.0609+-0.9812           11.9322+-1.1826          might be 1.0946x faster
   constant-test                                      4.8277+-0.0772            4.8188+-0.0771        
   create-lots-of-functions                           9.6580+-0.6179            9.5850+-0.5294        
   cse-new-array-buffer                               2.4917+-0.3055            2.2670+-0.1727          might be 1.0991x faster
   cse-new-array                                      2.3025+-0.0822     ?      2.3456+-0.1759        ? might be 1.0187x slower
   DataView-custom-properties                        30.6132+-0.9256     ?     31.2958+-1.5092        ? might be 1.0223x slower
   delay-tear-off-arguments-strictmode               12.5073+-0.3747           12.1667+-0.3970          might be 1.0280x faster
   deltablue-varargs                                177.8333+-6.8327          169.1558+-10.3932         might be 1.0513x faster
   destructuring-arguments                          164.5846+-4.3356     ?    169.4613+-18.8243       ? might be 1.0296x slower
   destructuring-parameters-overridden-by-function   
                                                      0.4498+-0.0121            0.4494+-0.0139        
   destructuring-swap                                 4.7052+-0.1062     ?      4.7530+-0.0581        ? might be 1.0102x slower
   direct-arguments-getbyval                          1.2299+-0.0906     ?      1.2790+-0.2415        ? might be 1.0399x slower
   div-boolean-double                                 5.2735+-0.0943     ?      5.3004+-0.0205        ?
   div-boolean                                        8.0701+-0.1059            8.0368+-0.0772        
   double-get-by-val-out-of-bounds                    4.8618+-0.9347            4.5375+-0.1998          might be 1.0715x faster
   double-pollution-getbyval                          8.7028+-0.1014            8.6739+-0.0970        
   double-pollution-putbyoffset                       3.7285+-0.2148            3.6625+-0.1704          might be 1.0180x faster
   double-real-use                                   23.9666+-0.4957     ?     24.9035+-1.6080        ? might be 1.0391x slower
   double-to-int32-typed-array-no-inline              2.5832+-0.6154            2.2244+-0.1175          might be 1.1613x faster
   double-to-int32-typed-array                        2.0058+-0.0260     ?      2.0152+-0.0458        ?
   double-to-uint32-typed-array-no-inline             2.2391+-0.0671     ?      2.3342+-0.1788        ? might be 1.0425x slower
   double-to-uint32-typed-array                       2.0764+-0.0350     ?      2.1123+-0.0824        ? might be 1.0173x slower
   elidable-new-object-dag                           33.9972+-0.7653           33.8401+-0.5661        
   elidable-new-object-roflcopter                    32.9342+-1.2311     ?     33.0465+-0.5731        ?
   elidable-new-object-then-call                     31.6366+-1.0875     ?     32.0599+-0.9868        ? might be 1.0134x slower
   elidable-new-object-tree                          37.6227+-1.3809           37.4583+-0.4553        
   empty-string-plus-int                              4.8105+-0.0794     ^      4.6560+-0.0400        ^ definitely 1.0332x faster
   emscripten-cube2hash                              27.2149+-2.7825     ?     27.7684+-2.3248        ? might be 1.0203x slower
   exit-length-on-plain-object                       12.7218+-0.9389     !     15.6928+-0.8747        ! definitely 1.2335x slower
   external-arguments-getbyval                        1.3810+-0.1708            1.2740+-0.1061          might be 1.0840x faster
   external-arguments-putbyval                        2.2612+-0.3810            2.1069+-0.0661          might be 1.0733x faster
   fixed-typed-array-storage-var-index                1.2815+-0.2721     ?      1.3269+-0.2734        ? might be 1.0354x slower
   fixed-typed-array-storage                          0.8901+-0.0153     ?      1.2246+-0.5467        ? might be 1.3758x slower
   Float32Array-matrix-mult                           3.9270+-0.2675     ?      4.0329+-0.1370        ? might be 1.0270x slower
   Float32Array-to-Float64Array-set                  46.4519+-0.5630     ?     47.1915+-1.1639        ? might be 1.0159x slower
   Float64Array-alloc-long-lived                     59.5718+-2.2766           59.4033+-1.9387        
   Float64Array-to-Int16Array-set                    57.0536+-1.6087           56.3014+-1.3008          might be 1.0134x faster
   fold-double-to-int                                12.1692+-0.3837           12.1383+-0.1429        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.5530+-1.2079           11.0991+-1.2505          might be 1.0409x faster
   fold-get-by-id-to-multi-get-by-offset             10.5317+-0.9060     ?     10.9688+-1.8369        ? might be 1.0415x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.8232+-1.7974            8.4367+-1.2687          might be 1.0458x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.6947+-1.0303            8.5572+-1.5692          might be 1.0161x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.6204+-1.9938            9.3383+-0.9781          might be 1.0302x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.1820+-1.7293     ?      9.6665+-2.1067        ? might be 1.5637x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.0935+-0.1918     ?      9.5677+-0.8311        ? might be 1.0521x slower
   fold-put-by-id-to-multi-put-by-offset             10.7448+-0.7409     ?     11.6541+-1.5525        ? might be 1.0846x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     11.8110+-1.7083           10.6590+-0.4639          might be 1.1081x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.0337+-1.3685           10.4695+-1.3045          might be 1.0539x faster
   fold-put-structure                                 4.7858+-1.0782     !      9.7280+-2.5686        ! definitely 2.0327x slower
   for-of-iterate-array-entries                      11.1143+-0.5986           10.7583+-0.0636          might be 1.0331x faster
   for-of-iterate-array-keys                          3.2562+-0.4577     ?      3.4440+-0.1822        ? might be 1.0577x slower
   for-of-iterate-array-values                        3.0048+-0.1990     !      3.3866+-0.1128        ! definitely 1.1270x slower
   fround                                            17.3387+-0.2861     ?     18.0580+-1.0879        ? might be 1.0415x slower
   ftl-library-inlining-dataview                     55.9319+-0.9706     ?     56.1827+-0.8821        ?
   ftl-library-inlining                              98.6658+-1.0069     ^     95.2107+-0.3298        ^ definitely 1.0363x faster
   function-call                                     10.6126+-0.0992     ?     10.6792+-0.1939        ?
   function-dot-apply                                 2.0356+-0.0676     ?      2.1530+-0.1723        ? might be 1.0577x slower
   function-test                                      2.7437+-0.1682            2.7321+-0.1554        
   function-with-eval                                92.5800+-0.8755     ?     93.3281+-1.4975        ?
   gcse-poly-get-less-obvious                        20.4156+-0.3247     ?     20.8866+-0.7728        ? might be 1.0231x slower
   gcse-poly-get                                     26.5012+-2.2962           23.4316+-3.2162          might be 1.1310x faster
   gcse                                               3.8020+-0.0425     ^      3.4362+-0.0913        ^ definitely 1.1065x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5957+-0.0710            2.5888+-0.0491        
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7639+-0.2909     ^      4.6324+-0.0777        ^ definitely 1.2443x faster
   get-by-id-chain-from-try-block                     2.4410+-0.0962            2.4122+-0.0709          might be 1.0119x faster
   get-by-id-check-structure-elimination              4.3538+-0.0799     ^      3.9196+-0.1287        ^ definitely 1.1108x faster
   get-by-id-proto-or-self                           15.6344+-0.4784           14.9376+-0.2563          might be 1.0466x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8895+-0.0228     ?      3.2565+-0.6422        ? might be 1.1270x slower
   get-by-id-self-or-proto                           15.4174+-0.5846     ?     15.9132+-1.1442        ? might be 1.0322x slower
   get-by-val-out-of-bounds                           4.3680+-0.2217            4.2543+-0.0847          might be 1.0267x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.8315+-0.0511            2.7559+-0.0672          might be 1.0274x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.1059+-0.3255            5.7941+-0.0383          might be 1.0538x faster
   get-by-val-with-string-chain-from-try-block   
                                                      2.4731+-0.1100            2.3979+-0.0247          might be 1.0314x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.2080+-0.1137            5.1986+-0.2213        
   get-by-val-with-string-proto-or-self              16.3051+-0.9881           16.2748+-0.9150        
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.3452+-0.0403     ^      3.0539+-0.0664        ^ definitely 1.0954x faster
   get-by-val-with-string-self-or-proto              15.9242+-0.9263     ?     16.2294+-1.7299        ? might be 1.0192x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0992+-0.0190     ?      3.1392+-0.1002        ? might be 1.0129x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3888+-0.1304           12.2392+-0.1030          might be 1.0122x faster
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.5190+-0.2944            2.3950+-0.0620          might be 1.0517x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.6271+-0.5589           11.3650+-0.1759          might be 1.0231x faster
   get-by-val-with-symbol-proto-or-self              15.2840+-0.6269     ?     15.8708+-1.2282        ? might be 1.0384x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.7252+-0.0699     ?      3.7436+-0.0778        ?
   get-by-val-with-symbol-self-or-proto              16.0485+-1.2303           15.5035+-1.1314          might be 1.0352x faster
   get_callee_monomorphic                             2.4707+-0.1720            2.3127+-0.0949          might be 1.0683x faster
   get_callee_polymorphic                             3.3920+-0.1897     ?      3.4490+-0.1121        ? might be 1.0168x slower
   getter-no-activation                               4.8055+-0.2289            4.7218+-0.0900          might be 1.0177x faster
   getter-prototype                                   8.8928+-0.1539     ^      7.8325+-0.0895        ^ definitely 1.1354x faster
   getter-richards                                  122.2996+-4.7402          112.2590+-12.0441         might be 1.0894x faster
   getter                                             5.7893+-0.9336     ?      6.2678+-0.6372        ? might be 1.0826x slower
   global-object-access-with-mutating-structure   
                                                      5.7130+-0.3589            5.6577+-0.1565        
   global-var-const-infer-fire-from-opt               0.7432+-0.0943            0.7409+-0.0620        
   global-var-const-infer                             0.6775+-0.0661     ?      0.7139+-0.1114        ? might be 1.0536x slower
   hard-overflow-check-equal                         32.5212+-0.6809     ^     27.0288+-1.0493        ^ definitely 1.2032x faster
   hard-overflow-check                               33.5828+-1.6557     ^     26.6927+-2.4828        ^ definitely 1.2581x faster
   HashMap-put-get-iterate-keys                      26.2586+-2.2311           25.8042+-1.5101          might be 1.0176x faster
   HashMap-put-get-iterate                           28.2961+-1.7193           27.5394+-2.2205          might be 1.0275x faster
   HashMap-string-put-get-iterate                    25.0199+-1.4472           24.9035+-1.6663        
   hoist-make-rope                                    8.9907+-0.8762     ?      8.9948+-1.7127        ?
   hoist-poly-check-structure-effectful-loop   
                                                      4.2053+-0.0732     ^      3.5889+-0.0510        ^ definitely 1.1718x faster
   hoist-poly-check-structure                         3.3177+-0.0522            3.2021+-0.0790          might be 1.0361x faster
   imul-double-only                                   7.5194+-0.7492            7.3422+-0.4815          might be 1.0241x faster
   imul-int-only                                      8.9041+-1.4102            8.3981+-0.5832          might be 1.0603x faster
   imul-mixed                                         6.8191+-0.3905     ?      6.8403+-0.2804        ?
   in-four-cases                                     16.9794+-0.5416     ?     17.4189+-0.8348        ? might be 1.0259x slower
   in-one-case-false                                 10.0020+-0.6094     ?     10.0507+-0.6904        ?
   in-one-case-true                                  10.0309+-0.9024            9.4259+-0.3791          might be 1.0642x faster
   in-two-cases                                       9.8362+-0.7490            9.5291+-0.1720          might be 1.0322x faster
   indexed-properties-in-objects                      2.7590+-0.0975            2.7463+-0.0526        
   infer-closure-const-then-mov-no-inline             3.5654+-0.0445     ?      3.5659+-0.1047        ?
   infer-closure-const-then-mov                      18.4739+-0.8179           18.2969+-0.6610        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0356+-0.5375           11.0333+-0.5446        
   infer-closure-const-then-put-to-scope             23.5270+-1.0831           22.6763+-0.3089          might be 1.0375x faster
   infer-closure-const-then-reenter-no-inline   
                                                     45.0827+-1.0119           44.8099+-0.9203        
   infer-closure-const-then-reenter                  22.8745+-0.9968           22.7742+-0.5190        
   infer-constant-global-property                     3.4010+-0.0572            3.3731+-0.0418        
   infer-constant-property                            2.6145+-0.0820     ?      2.6703+-0.0841        ? might be 1.0214x slower
   infer-one-time-closure-ten-vars                    7.7696+-0.2172            7.7333+-0.3244        
   infer-one-time-closure-two-vars                    7.3708+-0.1531     ?      7.4640+-0.2837        ? might be 1.0126x slower
   infer-one-time-closure                             7.3285+-0.4484            7.2106+-0.0923          might be 1.0164x faster
   infer-one-time-deep-closure                       11.0614+-1.4578           10.7964+-0.3081          might be 1.0245x faster
   inline-arguments-access                            3.6347+-0.1125     ?      3.8083+-0.2458        ? might be 1.0478x slower
   inline-arguments-aliased-access                    3.8827+-0.3560            3.6642+-0.1387          might be 1.0596x faster
   inline-arguments-local-escape                      3.8428+-0.1171     ?      4.0070+-0.5886        ? might be 1.0427x slower
   inline-get-scoped-var                              4.6508+-0.1804     ?      4.7192+-0.2606        ? might be 1.0147x slower
   inlined-put-by-id-transition                       9.0524+-0.4857     ?      9.6212+-0.8371        ? might be 1.0628x slower
   inlined-put-by-val-with-string-transition   
                                                     41.1200+-0.7952     ?     41.7339+-1.5971        ? might be 1.0149x slower
   inlined-put-by-val-with-symbol-transition   
                                                     41.4701+-1.7365           41.2740+-1.4864        
   int-or-other-abs-then-get-by-val                   4.4325+-0.0518     ?      4.4717+-0.0816        ?
   int-or-other-abs-zero-then-get-by-val             15.8817+-0.5589     ?     16.0114+-1.5829        ?
   int-or-other-add-then-get-by-val                   3.9924+-0.0374     ?      4.0691+-0.1508        ? might be 1.0192x slower
   int-or-other-add                                   5.0435+-0.3923     ?      5.1272+-0.3428        ? might be 1.0166x slower
   int-or-other-div-then-get-by-val                   3.9332+-0.4777            3.6976+-0.0567          might be 1.0637x faster
   int-or-other-max-then-get-by-val                   4.0122+-0.2783            3.9182+-0.2664          might be 1.0240x faster
   int-or-other-min-then-get-by-val                   3.8909+-0.2247            3.7238+-0.0598          might be 1.0449x faster
   int-or-other-mod-then-get-by-val                   3.4381+-0.0452     ?      3.6979+-0.6451        ? might be 1.0756x slower
   int-or-other-mul-then-get-by-val                   3.5179+-0.0879     ?      3.7096+-0.2914        ? might be 1.0545x slower
   int-or-other-neg-then-get-by-val                   4.0693+-0.2634            3.9995+-0.0656          might be 1.0175x faster
   int-or-other-neg-zero-then-get-by-val             15.6581+-0.2916           15.4326+-0.5063          might be 1.0146x faster
   int-or-other-sub-then-get-by-val                   3.9843+-0.0486     ?      4.2035+-0.3213        ? might be 1.0550x slower
   int-or-other-sub                                   3.5651+-0.1801            3.4811+-0.1223          might be 1.0241x faster
   int-overflow-local                                 3.9746+-0.0804     ?      4.1954+-0.3200        ? might be 1.0556x slower
   Int16Array-alloc-long-lived                       42.8050+-1.4025     ?     43.9364+-1.1584        ? might be 1.0264x slower
   Int16Array-bubble-sort-with-byteLength            17.1491+-0.3702     ?     17.6703+-1.2370        ? might be 1.0304x slower
   Int16Array-bubble-sort                            16.9415+-0.6676           16.4939+-0.3557          might be 1.0271x faster
   Int16Array-load-int-mul                            1.4108+-0.0191     ?      1.4323+-0.0687        ? might be 1.0153x slower
   Int16Array-to-Int32Array-set                      42.9880+-1.1997     ?     44.5687+-1.0891        ? might be 1.0368x slower
   Int32Array-alloc-large                            12.4425+-1.1345     ?     12.6727+-0.2117        ? might be 1.0185x slower
   Int32Array-alloc-long-lived                       48.7629+-2.1034           48.2029+-1.6338          might be 1.0116x faster
   Int32Array-alloc                                   3.0721+-0.2887            2.7614+-0.1544          might be 1.1125x faster
   Int32Array-Int8Array-view-alloc                    6.1337+-0.4953     ?      6.8896+-1.9801        ? might be 1.1232x slower
   int52-spill                                        4.5082+-0.0449     ?      5.0986+-0.5860        ? might be 1.1310x slower
   Int8Array-alloc-long-lived                        37.8144+-0.9387     ?     38.5215+-0.8741        ? might be 1.0187x slower
   Int8Array-load-with-byteLength                     3.3598+-0.0770            3.3457+-0.0666        
   Int8Array-load                                     3.3770+-0.0643     ?      3.4445+-0.1824        ? might be 1.0200x slower
   integer-divide                                    10.6740+-0.8913           10.4662+-0.4130          might be 1.0199x faster
   integer-modulo                                     1.6125+-0.0601            1.6066+-0.0550        
   is-boolean-fold-tricky                             3.7686+-0.0554     ?      3.8389+-0.1863        ? might be 1.0186x slower
   is-boolean-fold                                    2.6112+-0.0588            2.6110+-0.0196        
   is-function-fold-tricky-internal-function   
                                                      9.7222+-0.5144            9.4925+-0.1954          might be 1.0242x faster
   is-function-fold-tricky                            4.0018+-0.0664     ?      4.1520+-0.3898        ? might be 1.0375x slower
   is-function-fold                                   2.6331+-0.0461     ?      2.6611+-0.0716        ? might be 1.0106x slower
   is-number-fold-tricky                              3.9784+-0.1245            3.9709+-0.1524        
   is-number-fold                                     2.7143+-0.2321            2.6601+-0.1040          might be 1.0204x faster
   is-object-or-null-fold-functions                   2.6341+-0.0445     ?      2.6759+-0.0884        ? might be 1.0159x slower
   is-object-or-null-fold-less-tricky                 4.0076+-0.0810     ?      4.0934+-0.2020        ? might be 1.0214x slower
   is-object-or-null-fold-tricky                      4.8174+-0.1619     ?      4.8824+-0.2294        ? might be 1.0135x slower
   is-object-or-null-fold                             2.7059+-0.0852            2.6928+-0.0990        
   is-object-or-null-trickier-function                4.0779+-0.1171            4.0349+-0.0420          might be 1.0107x faster
   is-object-or-null-trickier-internal-function   
                                                     10.1472+-0.1714            9.9172+-0.3326          might be 1.0232x faster
   is-object-or-null-tricky-function                  4.1335+-0.1985            4.1117+-0.2087        
   is-object-or-null-tricky-internal-function   
                                                      7.3047+-0.0942     ?      7.7479+-0.4466        ? might be 1.0607x slower
   is-string-fold-tricky                              3.9859+-0.0407            3.9516+-0.1861        
   is-string-fold                                     2.6926+-0.2511            2.6252+-0.0547          might be 1.0257x faster
   is-undefined-fold-tricky                           3.3969+-0.2473            3.2858+-0.0375          might be 1.0338x faster
   is-undefined-fold                                  2.6242+-0.0455     ?      2.6334+-0.0509        ?
   JSONP-negative-0                                   0.2548+-0.0342            0.2472+-0.0071          might be 1.0308x faster
   large-int-captured                                 4.1525+-0.1985            4.1058+-0.1180          might be 1.0114x faster
   large-int-neg                                     13.8376+-0.3785     ?     13.8585+-0.2518        ?
   large-int                                         13.1132+-0.2649           13.0769+-0.3449        
   load-varargs-elimination                          20.3203+-0.5074     ?     20.4447+-0.4997        ?
   logical-not-weird-types                            3.1070+-0.1549     ?      3.2371+-0.3767        ? might be 1.0419x slower
   logical-not                                        4.4531+-0.1698     ?      4.4636+-0.1737        ?
   lots-of-fields                                     8.7481+-0.3075     !      9.9758+-0.8970        ! definitely 1.1403x slower
   make-indexed-storage                               2.7694+-0.1847     ?      3.0671+-0.3833        ? might be 1.1075x slower
   make-rope-cse                                      3.7627+-0.4665     ?      3.8555+-0.2591        ? might be 1.0247x slower
   marsaglia-larger-ints                             32.2712+-1.2378     ?     32.6901+-1.4620        ? might be 1.0130x slower
   marsaglia-osr-entry                               22.1102+-1.7625           21.3010+-0.4922          might be 1.0380x faster
   math-with-out-of-bounds-array-values              21.6844+-1.0511           21.5551+-0.5822        
   max-boolean                                        2.5820+-0.0699     ?      2.6283+-0.0250        ? might be 1.0179x slower
   method-on-number                                  15.4005+-0.2286     ?     15.6253+-0.3632        ? might be 1.0146x slower
   min-boolean                                        2.6105+-0.0401     ?      2.9282+-0.6871        ? might be 1.1217x slower
   minus-boolean-double                               3.0334+-0.0238     ?      3.0553+-0.0603        ?
   minus-boolean                                      2.3148+-0.0159            2.2912+-0.0482          might be 1.0103x faster
   misc-strict-eq                                    28.8842+-1.3300     ?     29.4826+-2.1874        ? might be 1.0207x slower
   mod-boolean-double                                11.0057+-0.0855     ?     11.4257+-0.4965        ? might be 1.0382x slower
   mod-boolean                                        8.3228+-0.2264            8.2702+-0.1365        
   mul-boolean-double                                 3.6002+-0.0407            3.5934+-0.0404        
   mul-boolean                                        2.8011+-0.0598            2.7946+-0.0464        
   neg-boolean                                        3.1781+-0.1603     ?      3.1788+-0.3223        ?
   negative-zero-divide                               0.3497+-0.0217            0.3322+-0.0071          might be 1.0527x faster
   negative-zero-modulo                               0.3309+-0.0302            0.3300+-0.0151        
   negative-zero-negate                               0.3402+-0.0300            0.3374+-0.0284        
   nested-function-parsing                           44.7537+-0.3487     ?     47.6743+-7.9140        ? might be 1.0653x slower
   new-array-buffer-dead                             88.0920+-1.2346           87.0777+-0.2166          might be 1.0116x faster
   new-array-buffer-push                              6.3342+-0.3217     ?      6.3610+-0.3956        ?
   new-array-dead                                    15.2585+-0.9004           15.1410+-1.2405        
   new-array-push                                     3.7107+-0.6123            3.5001+-0.1058          might be 1.0602x faster
   no-inline-constructor                             31.4322+-0.9602           30.3726+-0.3107          might be 1.0349x faster
   number-test                                        3.0252+-0.1037            3.0068+-0.0414        
   object-closure-call                                5.1714+-0.0697     ^      4.9052+-0.0421        ^ definitely 1.0543x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.2858+-0.2562            4.1847+-0.1836          might be 1.0241x faster
   object-test                                        2.6774+-0.0381     ?      2.7833+-0.1163        ? might be 1.0396x slower
   obvious-sink-pathology-taken                      98.5884+-1.7220     ?     98.6610+-0.7807        ?
   obvious-sink-pathology                            93.9097+-0.9381     ?     94.4691+-0.7443        ?
   obviously-elidable-new-object                     28.0309+-0.1980     ?     28.6387+-1.0657        ? might be 1.0217x slower
   plus-boolean-arith                                 2.5700+-0.5385            2.5673+-0.4820        
   plus-boolean-double                                3.1879+-0.1175            3.1248+-0.1022          might be 1.0202x faster
   plus-boolean                                       2.6839+-0.3839            2.5038+-0.0581          might be 1.0719x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.2185+-0.0345     ?      3.2238+-0.0552        ?
   poly-chain-access-different-prototypes             3.4225+-0.2746            3.3510+-0.2151          might be 1.0214x faster
   poly-chain-access-simpler                          3.2130+-0.1118     ?      3.4087+-0.2633        ? might be 1.0609x slower
   poly-chain-access                                  3.2137+-0.0328     ?      3.2773+-0.1058        ? might be 1.0198x slower
   poly-stricteq                                     54.1142+-11.0091          49.2927+-0.4620          might be 1.0978x faster
   polymorphic-array-call                             1.6573+-0.2991            1.4249+-0.3520          might be 1.1631x faster
   polymorphic-get-by-id                              2.9280+-0.1660            2.8101+-0.0568          might be 1.0420x faster
   polymorphic-put-by-id                             27.7259+-1.2687     ?     28.4172+-0.6048        ? might be 1.0249x slower
   polymorphic-put-by-val-with-string                29.0875+-2.2989           28.2561+-1.8394          might be 1.0294x faster
   polymorphic-put-by-val-with-symbol                27.9021+-1.0384     ?     28.5615+-1.6244        ? might be 1.0236x slower
   polymorphic-structure                             13.0709+-0.2294     ^     12.4043+-0.0402        ^ definitely 1.0537x faster
   polyvariant-monomorphic-get-by-id                  6.7465+-1.2231     ?      7.6111+-0.9520        ? might be 1.1281x slower
   proto-getter-access                                8.6458+-0.5719            8.3782+-0.2081          might be 1.0319x faster
   prototype-access-with-mutating-prototype           5.3808+-0.0994     ?      5.4672+-0.3300        ? might be 1.0161x slower
   put-by-id-replace-and-transition                   8.1746+-0.6979            7.8530+-0.7722          might be 1.0409x faster
   put-by-id-slightly-polymorphic                     2.7203+-0.2972            2.7012+-0.0619        
   put-by-id                                         10.0052+-0.7015            9.7212+-0.3880          might be 1.0292x faster
   put-by-val-direct                                  0.3543+-0.0189            0.3495+-0.0382          might be 1.0137x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.2645+-0.2655            5.1637+-0.1591          might be 1.0195x faster
   put-by-val-machine-int                             2.5867+-0.0587     ?      2.6604+-0.3102        ? might be 1.0285x slower
   put-by-val-with-string-replace-and-transition   
                                                     10.4016+-0.4380           10.2722+-0.3960          might be 1.0126x faster
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9104+-0.0489            2.8376+-0.0284          might be 1.0256x faster
   put-by-val-with-string                            10.4681+-0.6371           10.2043+-0.2468          might be 1.0259x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     12.0392+-1.0014           11.8336+-0.4149          might be 1.0174x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2569+-0.2508            3.1962+-0.0846          might be 1.0190x faster
   put-by-val-with-symbol                            10.3306+-0.5818     ?     10.9072+-0.9625        ? might be 1.0558x slower
   rare-osr-exit-on-local                            13.4838+-0.3143     ?     13.6044+-0.1004        ?
   raytrace-with-empty-try-catch                      5.2295+-0.3844     ?      5.2699+-0.4771        ?
   raytrace-with-try-catch                            9.8995+-0.3166     ?     10.0918+-0.5439        ? might be 1.0194x slower
   register-pressure-from-osr                        17.5092+-0.5563           16.8988+-1.3316          might be 1.0361x faster
   repeat-multi-get-by-offset                        21.7959+-0.3320     ^     20.5215+-0.2055        ^ definitely 1.0621x faster
   richards-empty-try-catch                          80.4956+-2.7170     ^     75.0305+-1.2187        ^ definitely 1.0728x faster
   richards-try-catch                               238.1567+-2.3966     ?    281.5015+-102.7455      ? might be 1.1820x slower
   setter-prototype                                   7.6861+-0.0883     ?      7.8169+-0.3861        ? might be 1.0170x slower
   setter                                             6.3018+-1.0505            5.3936+-0.7868          might be 1.1684x faster
   simple-activation-demo                            24.1591+-0.5253     ?     24.5610+-0.4787        ? might be 1.0166x slower
   simple-getter-access                              10.7656+-0.1738           10.6199+-0.2206          might be 1.0137x faster
   simple-poly-call-nested                            8.6737+-0.7339            8.5588+-0.7619          might be 1.0134x faster
   simple-poly-call                                   1.2817+-0.0586     ?      1.3352+-0.1046        ? might be 1.0417x slower
   sin-boolean                                       19.1953+-1.8377     ?     21.6408+-2.3545        ? might be 1.1274x slower
   singleton-scope                                   56.3237+-0.6195           56.1107+-1.0060        
   sink-function                                      9.9395+-0.3538     ?     10.3332+-0.7959        ? might be 1.0396x slower
   sink-huge-activation                              16.3710+-0.5455     ?     17.3427+-0.5678        ? might be 1.0594x slower
   sinkable-new-object-dag                           55.0791+-1.0536     ?     55.3174+-1.9154        ?
   sinkable-new-object-taken                         44.9294+-0.8349           44.8969+-1.3799        
   sinkable-new-object                               29.7616+-0.7979     ?     30.0410+-0.9881        ?
   slow-array-profile-convergence                     2.6222+-0.4217            2.5402+-0.1375          might be 1.0323x faster
   slow-convergence                                   2.3660+-0.1463            2.2963+-0.0200          might be 1.0304x faster
   slow-ternaries                                    18.1591+-2.0277           17.3085+-0.5495          might be 1.0491x faster
   sorting-benchmark                                 16.6117+-0.1717     ?     16.9953+-0.7647        ? might be 1.0231x slower
   sparse-conditional                                 1.1291+-0.0194     ?      1.1597+-0.0628        ? might be 1.0271x slower
   splice-to-remove                                  12.1139+-0.4865           11.8872+-0.2664          might be 1.0191x faster
   string-char-code-at                               13.2475+-0.7080           13.1129+-0.4481          might be 1.0103x faster
   string-concat-object                               2.2237+-0.2179            2.1785+-0.0584          might be 1.0207x faster
   string-concat-pair-object                          2.2999+-0.3856            2.1578+-0.1947          might be 1.0659x faster
   string-concat-pair-simple                          9.6015+-0.5308            9.1500+-0.3475          might be 1.0493x faster
   string-concat-simple                               9.6510+-0.6523            9.6064+-0.6254        
   string-cons-repeat                                 6.4468+-0.2753     ?      6.4529+-0.3588        ?
   string-cons-tower                                  6.7308+-0.3619            6.5052+-0.2129          might be 1.0347x faster
   string-equality                                   15.2827+-0.9493           15.0187+-0.3588          might be 1.0176x faster
   string-get-by-val-big-char                         6.4831+-0.1447            6.4093+-0.0824          might be 1.0115x faster
   string-get-by-val-out-of-bounds-insane             3.1792+-0.1296            3.1156+-0.0982          might be 1.0204x faster
   string-get-by-val-out-of-bounds                    3.9298+-0.1233            3.9070+-0.0604        
   string-get-by-val                                  2.9985+-0.4511            2.7920+-0.0397          might be 1.0739x faster
   string-hash                                        1.8282+-0.0408            1.8235+-0.0411        
   string-long-ident-equality                        13.0981+-0.1966           13.0455+-0.2186        
   string-out-of-bounds                              10.2070+-0.2828            9.8489+-0.2258          might be 1.0364x faster
   string-repeat-arith                               26.5071+-1.7995     ?     26.7694+-1.2087        ?
   string-sub                                        54.0820+-1.7878     ?     54.2485+-1.0491        ?
   string-test                                        2.8761+-0.0830     ?      3.2080+-0.2992        ? might be 1.1154x slower
   string-var-equality                               26.7916+-0.3642     ?     27.0715+-1.0954        ? might be 1.0104x slower
   structure-hoist-over-transitions                   2.3475+-0.0634     ?      2.3582+-0.1085        ?
   substring-concat-weird                            35.7413+-0.5952     ?     40.7201+-10.5762       ? might be 1.1393x slower
   substring-concat                                  39.9545+-1.0555           39.5170+-0.9721          might be 1.0111x faster
   substring                                         45.5553+-1.6892           44.8214+-1.3797          might be 1.0164x faster
   switch-char-constant                               2.7635+-0.2676            2.7005+-0.0959          might be 1.0234x faster
   switch-char                                        6.2032+-0.6412            6.1126+-1.3381          might be 1.0148x faster
   switch-constant                                    8.6914+-0.5991            7.9536+-0.8459          might be 1.0928x faster
   switch-string-basic-big-var                       14.4274+-0.4404     ?     14.4664+-0.3161        ?
   switch-string-basic-big                           15.0580+-0.1261           14.7757+-0.2021          might be 1.0191x faster
   switch-string-basic-var                           13.4624+-0.2941           13.4200+-0.4294        
   switch-string-basic                               12.8307+-0.6787           12.4835+-0.3739          might be 1.0278x faster
   switch-string-big-length-tower-var                17.5719+-0.3273     !     18.2921+-0.3311        ! definitely 1.0410x slower
   switch-string-length-tower-var                    13.3907+-0.4744           13.0042+-0.1791          might be 1.0297x faster
   switch-string-length-tower                        11.4096+-0.2833           11.2950+-0.1259          might be 1.0102x faster
   switch-string-short                               11.3164+-0.1766     ?     11.4895+-0.3603        ? might be 1.0153x slower
   switch                                            11.0555+-0.8324     ?     11.1816+-0.7361        ? might be 1.0114x slower
   tear-off-arguments-simple                          3.0653+-0.1760     ?      3.1147+-0.0880        ? might be 1.0161x slower
   tear-off-arguments                                 4.1008+-0.1576            4.0742+-0.1671        
   temporal-structure                                11.7981+-0.2894           11.5581+-0.1590          might be 1.0208x faster
   to-int32-boolean                                  13.0162+-0.5467           12.3929+-0.1708          might be 1.0503x faster
   try-catch-get-by-val-cloned-arguments             10.0589+-1.0130            9.3782+-0.4393          might be 1.0726x faster
   try-catch-get-by-val-direct-arguments              2.3096+-0.3516            2.1451+-0.0946          might be 1.0767x faster
   try-catch-get-by-val-scoped-arguments              4.8257+-0.5401            4.7975+-0.1665        
   typed-array-get-set-by-val-profiling              26.7119+-0.9874     ?     27.2920+-0.8589        ? might be 1.0217x slower
   undefined-property-access                        223.4028+-0.6433     ^    216.8560+-1.5101        ^ definitely 1.0302x faster
   undefined-test                                     2.9779+-0.0749     ?      3.0611+-0.0497        ? might be 1.0279x slower
   unprofiled-licm                                   13.8807+-0.4931     ^      9.3837+-0.2532        ^ definitely 1.4792x faster
   v8-raytrace-with-empty-try-catch                  48.3561+-1.7011     ?     48.9113+-1.2492        ? might be 1.0115x slower
   v8-raytrace-with-try-catch                        62.2459+-1.7889           61.5130+-0.9639          might be 1.0119x faster
   varargs-call                                      12.9253+-0.4836     ?     13.1195+-0.6122        ? might be 1.0150x slower
   varargs-construct-inline                          22.1121+-1.0437     ?     22.1789+-1.2781        ?
   varargs-construct                                 20.4200+-0.5051     ?     20.5695+-1.1725        ?
   varargs-inline                                     8.6818+-0.1798            8.5725+-0.1014          might be 1.0128x faster
   varargs-strict-mode                                9.5401+-0.1624     ?      9.8438+-0.5807        ? might be 1.0318x slower
   varargs                                            9.7897+-0.4717            9.6482+-0.0969          might be 1.0147x faster
   weird-inlining-const-prop                          2.2670+-0.2643            2.1498+-0.0607          might be 1.0545x faster

   &lt;geometric&gt;                                        8.0046+-0.0151            7.9926+-0.0367          might be 1.0015x faster

                                                        TipOfTree             PropTypeInference                                 
AsmBench:
   bigfib.cpp                                       449.1815+-9.0890     ?    453.3105+-3.8975        ?
   cray.c                                           389.8056+-1.0021     ?    391.8986+-1.8362        ?
   dry.c                                            419.7795+-7.9248          417.3834+-10.8220       
   FloatMM.c                                        680.8737+-2.3023     ?    681.4316+-2.7946        ?
   gcc-loops.cpp                                   3416.9170+-25.5728    ?   3422.0966+-37.2072       ?
   n-body.c                                         822.4246+-5.1849     ?    824.8667+-10.2035       ?
   Quicksort.c                                      401.0483+-5.8818     ?    405.2496+-4.5788        ? might be 1.0105x slower
   stepanov_container.cpp                          3462.0726+-26.9140    ?   3476.7963+-19.5554       ?
   Towers.c                                         233.2786+-1.3340          233.1695+-2.3573        

   &lt;geometric&gt;                                      709.4514+-1.0928     ?    711.6836+-2.7674        ? might be 1.0031x slower

                                                        TipOfTree             PropTypeInference                                 
CompressionBench:
   huffman                                           60.2751+-1.5927     ?     60.3528+-1.4476        ?
   arithmetic-simple                                272.2301+-5.2355          270.3472+-0.9339        
   arithmetic-precise                               242.4681+-1.2903     ?    245.0926+-1.4835        ? might be 1.0108x slower
   arithmetic-complex-precise                       244.4243+-5.9900          242.8595+-1.2462        
   arithmetic-precise-order-0                       281.7957+-4.5846          279.1423+-1.5067        
   arithmetic-precise-order-1                       296.9806+-2.1834     ?    299.2129+-4.8285        ?
   arithmetic-precise-order-2                       341.7417+-2.6325     ?    343.8968+-3.2327        ?
   arithmetic-simple-order-1                        316.1276+-1.8707     ?    321.6702+-8.8431        ? might be 1.0175x slower
   arithmetic-simple-order-2                        367.3960+-6.7300     ?    368.8064+-4.1606        ?
   lz-string                                        311.3584+-5.9814     ?    313.3135+-10.2423       ?

   &lt;geometric&gt;                                      251.3111+-1.7960     ?    252.0734+-0.9986        ? might be 1.0030x slower

                                                        TipOfTree             PropTypeInference                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                                   50.9013+-0.1140     ^     49.7302+-0.1931        ^ definitely 1.0236x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127743</commentid>
    <comment_count>48</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 13:50:00 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/190076</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127893</commentid>
    <comment_count>49</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-21 19:25:12 -0700</bug_when>
    <thetext>We&apos;re seeing ~3% improvement on Octane, ~8% improvement on Kraken, and ~1% improvement on JetStream from this change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260294</attachid>
            <date>2015-08-31 10:41:03 -0700</date>
            <delta_ts>2015-08-31 12:21:29 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>27028</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkxNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xOTA3LDYgKzE5MDksOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyog
REZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyog
REZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVy
cmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJl
ZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5
MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5
NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4
ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDYyOCw4ICs0NjMyLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4
MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBG
OTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5
Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNB
IC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNl
cHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24u
aCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAg
Ki8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywK
IAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8s
CkBAIC00NjYyLDYgKzQ2NjYsOCBAQAogCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJ
bmRleGluZ0hlYWRlcklubGluZXMuaCAqLywKIAkJCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcg
LyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdUeXBlLmggKi8sCisJCQkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVy
cmVkVHlwZS5jcHAgKi8sCisJCQkJMEYwQTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVk
VHlwZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MTIsMTAgKzQ3MTgsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDEzLDkgKzUwMTksOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNjAwOCw2ICs2MDE0LDcgQEAKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyog
Q29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkxQjg2OEVCNzAwNTQyNDQw
IC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFD
MjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21tb25JZGVu
dGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5IC8q
IFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNzgxMSw2ICs3ODE4LDcgQEAK
IAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5NzZDNjAw
MDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYx
MUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODkxNjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzUsNyArMzM1LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0
cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0
IGZvciBhbnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3Vs
ZCBiZSBpbmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcu
aXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8v
IENvbmN1cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8g
aWYgKHcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsK
KyAgICAvLyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0
aW9uOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVz
cHJlYWQsIGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxs
IGxlYXZlCisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUu
IEhlbmNlLCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4K
KyAgICAvLyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25l
LCB0aGVuIGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29t
cGlsYXRpb24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBw
aWVjZSBvZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxp
ZGF0ZSB0aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYg
KHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAg
IC8vIHRoZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0
YXRlIGJldHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdv
IHdheXMgdG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxs
KCkgd2l0aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBr
bm93IHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdo
ZW4gaXQgZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhw
b3NlIHRoZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3Vy
IG93biB3YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMg
dGhhdCB0aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29k
ZSBpcyBpbnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19pbmZvID0geyAiSW5mZXJy
ZWRUeXBlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGUpIH07CisKK0lu
ZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVk
VHlwZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlPih2
bS5oZWFwKSkgSW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nh
c3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6
On5JbmZlcnJlZFR5cGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBq
c0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisKKyAgICBpZiAoaW5mZXJyZWRUeXBlLT5tX3N0
cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKGluZmVy
cmVkVHlwZS0+bV9zdHJ1Y3R1cmUuZ2V0KCkpOworfQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZShKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBPdGhlcjsKKyAg
ICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgaWYgKHZh
bHVlLmlzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgaWYgKHZhbHVlLmlz
Q2VsbCgpKSB7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAg
ICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAg
ICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0
dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0
dXJlKCkpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gVG9wOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6bWVyZ2Uo
Y29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCit7CisgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRv
bToKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9v
bGVhbjoKKyAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewor
ICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBtX2tpbmQgPSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBPYmplY3Q6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RPck90aGVyOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIEludDMyOgorICAgICAg
ICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAg
Y2FzZSBOdW1iZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBOdW1iZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgRG91YmxlOgorICAgICAgICBzd2l0
Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIE51
bWJlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE51bWJlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMg
PSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNh
c2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAg
ICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBv
dGhlci5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRoaXMgPSBP
YmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdE9y
T3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAg
ICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAg
ICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyOgorICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0T3JP
dGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBP
YmplY3RPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE90aGVyOgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBU
b3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIFRvcDoKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpyZW1vdmVTdHJ1Y3R1cmUoKQorewor
ICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAg
ICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAg
ICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jv
b2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9yJiBv
dGhlcikgY29uc3QKK3sKKyAgICBEZXNjcmlwdG9yIG1lcmdlZCA9ICp0aGlzOworICAgIG1lcmdl
ZC5tZXJnZShvdGhlcik7CisgICAgcmV0dXJuICp0aGlzID09IG1lcmdlZDsKK30KKwordm9pZCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91
dC5wcmludCgiOiIsICptX3N0cnVjdHVyZSk7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRU
eXBlKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQo
KSkKKyAgICAsIG1fd2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVy
cmVkVHlwZTo6fkluZmVycmVkVHlwZSgpCit7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjppc1N0
aWxsVmFsaWQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlw
dG9yJiBleHBlY3RlZCkKK3sKKyAgICBpZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0g
ZXhwZWN0ZWQ7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgRGVz
Y3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
ZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0
LmFkZCh3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQo
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoZGVzY3JpcHRvcigpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OndpbGxTdG9y
ZVZhbHVlU2xvdyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBEZXNjcmlwdG9yIG15VHlwZSA9IGRlc2NyaXB0b3IobG9ja2Vy
KTsKKyAgICBEZXNjcmlwdG9yIG90aGVyVHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVl
KTsKKworICAgIG15VHlwZS5tZXJnZShvdGhlclR5cGUpOworCisgICAgQVNTRVJUKGRlc2NyaXB0
b3IobG9ja2VyKSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBpZiB3
ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgc2V0KGxvY2tlciwgdm0sIG15VHlwZSk7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sKKyAgICAvLyBCZSBkZWZl
bnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9u
J3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5l
d0Rlc2NyaXB0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRv
ciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJU
KG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJ
ZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQg
Y2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2Nr
ZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFT
U0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpKTsKKworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBz
dXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBu
b3cuIElmCisgICAgLy8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8g
VG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlm
IChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAg
Ly8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhl
biB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0
LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8g
ZG8gZXhwZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQg
dG8gd2F0Y2ggdGhpcyB0eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQu
IEFzc3VtZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFu
eSBtb3JlIHRoaW5ncyBmb3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3Ig
PSBUb3A7CisKKyAgICAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoIkluZmVycmVkIHR5cGUg
Y2hhbmdlZCIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0
dXJlIG9iamVjdCBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoIW5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIG1fc3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgIC8v
IEFkZCBhIG5ldyBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93Lgor
ICAgIGlmIChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7CisgICAgICAgIGlmIChtX3N0cnVj
dHVyZSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVz
IGlmIHdlIGdldCBoZXJlLgorICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0
dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVy
ZT4odGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNj
cmlwdG9yLnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChtX3N0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2Ny
aXB0b3Iga2luZC4KKyAgICBtX2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8v
IEFzc2VydCB0aGF0IHdlIGRpZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2Vy
KSA9PSBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVj
dHVyZSgpCit7CisgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX3BhcmVudC0+bV9sb2NrKTsKKyAgICAKKyAgICBE
ZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVz
Y3JpcHRvci5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgbmV3
RGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6
SW5mZXJyZWRTdHJ1Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBhcmVu
dCwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1
cmU6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikKK3sKKyAgICBtX3BhcmVudC0+cmVt
b3ZlU3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVy
ZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFw
KG1fcGFyZW50KS0+dm0oKTsKKworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudCkp
OworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAg
ICAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmZkZWYgSW5mZXJyZWRUeXBlX2gKKyNk
ZWZpbmUgSW5mZXJyZWRUeXBlX2gKKworI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisj
aW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9i
amVjdCB1c2VkIGZvciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBvYmplY3QgcHJvcGVy
dGllcy4KKworY2xhc3MgSW5mZXJyZWRUeXBlIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGUqIGNyZWF0
ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgZW51bSBLaW5kIDogdWludDhfdCB7Cisg
ICAgICAgIEJvdHRvbSwKKyAgICAgICAgQm9vbGVhbiwKKyAgICAgICAgT3RoZXIsCisgICAgICAg
IEludDMyLAorICAgICAgICBEb3VibGUsCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5n
LAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBPYmplY3RPck90aGVyLAorICAg
ICAgICBUb3AKKyAgICB9OworCisgICAgY2xhc3MgRGVzY3JpcHRvciB7CisgICAgcHVibGljOgor
ICAgICAgICBEZXNjcmlwdG9yKCkKKyAgICAgICAgICAgIDogbV9raW5kKEJvdHRvbSkKKyAgICAg
ICAgICAgICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgRGVzY3JpcHRvcihLaW5kIGtpbmQsIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0
cikKKyAgICAgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICAgICAsIG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIERlc2Ny
aXB0b3IgZm9yVmFsdWUoSlNWYWx1ZSk7CisKKyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVk
ZXNWYWx1ZShKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgICAgICAgICAgY2FzZSBCb3R0b206CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5pc0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgICAgICAgICBjYXNl
IEludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAg
ICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNEb3VibGUo
KTsKKyAgICAgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5pc051bWJlcigpOworICAgICAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmlzU3RyaW5nKCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1
Y3R1cmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlzQ2VsbCgp
ICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7CisgICAgICAg
ICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNPYmplY3Qo
KTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOworICAgICAg
ICAgICAgY2FzZSBUb3A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAg
ICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
fQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAgICAg
dm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvdGhlciBvbmUuCisgICAgICAg
IGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgS2luZCBt
X2tpbmQ7CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgfTsKKworICAgIENv
bmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBE
ZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9z
dHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIERlc2NyaXB0b3Ig
ZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIH0K
KyAgICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBj
b25zdCB7IHJldHVybiBkZXNjcmlwdG9yKCkua2luZCgpOyB9CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBk
ZXNjcmlwdG9yKCkuc3RydWN0dXJlKCk7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxs
U3RvcmVWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBpZiAoZGVzY3JpcHRvcihsb2Nr
ZXIpLmluY2x1ZGVzVmFsdWUobG9ja2VyLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHdpbGxTdG9yZVZhbHVlU2xvdyhsb2NrZXIsIHZtLCB2YWx1ZSk7CisgICAgfQorCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5zZSB0byB3YXRjaCB0
aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRoYXQKKyAgICAvLyB0
aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgorICAgIGJvb2wgY2FuV2F0Y2go
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJik7Cisg
ICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7CisgICAgCisgICAgdm9pZCBhZGRX
YXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCop
OworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUoVk0mKTsK
KyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAgICB2b2lkIHdpbGxTdG9yZVZhbHVlU2xvdyhjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBKU1ZhbHVlKTsKKyAgICB2b2lkIHNldChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9yKTsKKyAgICB2b2lkIHJlbW92
ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7Cisg
ICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKKworICAgIGNsYXNzIEluZmVycmVkU3Ry
dWN0dXJlIDogcHVibGljIFdhdGNocG9pbnQsIHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlKEluZmVycmVkVHlwZSog
cGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAg
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIEluZmVycmVkVHlwZSogbV9wYXJlbnQ7CisgICAgICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCisgICAgLy8gTk9URTogSWYgdGhpcyBp
cyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVz
IHRoYXQgaXQgd291bGRuJ3QgYmUKKyAgICAvLyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWlu
LiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9z
ZWQgdG8gdGhlIERGRworICAgIC8vIHRocmVhZC4gVGhlIERGRyB3aWxsIHVzZSB0aGUgSW5mZXJy
ZWRUeXBlIGFzIHRoZSB0aGluZyB0aGF0IGl0IHdhdGNoZXMuCisgICAgSW5saW5lV2F0Y2hwb2lu
dFNldCBtX3dhdGNocG9pbnRTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6SW5mZXJy
ZWRUeXBlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBJbmZlcnJl
ZFR5cGVfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260305</attachid>
            <date>2015-08-31 12:21:29 -0700</date>
            <delta_ts>2015-08-31 13:28:34 -0700</delta_ts>
            <desc>some more stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50056</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkxNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NTQsNiArNzU2LDggQEAKIAkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERG
R09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1OTg3RjJDMTY3RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29t
cGlsYXRpb25JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMUQxNkQwMkYzMDAwNTVBNURCIC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E1
MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMwREFEMDMwRkIxRUIxQTAwODJEMjA1IC8qIE5vZGVDb25zdHJ1
Y3RvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMEYxQjk0RDRE
RjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLzsgfTsKKwkJMEZGQzkyMTIxQjk0
RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVD
OEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZm
ZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTA3LDYgKzE5MTEsOCBAQAogCQkwRjA0Mzk2
QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNC
MjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
Lmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGls
YXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGls
YXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0
QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBw
YXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1
bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4
NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rl
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Miw2ICsyNTc4LDggQEAK
IAkJMEZGOTIyQ0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVk
Lm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gSlNDTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkw
RkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRU
eXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRE
NERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1
dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJp
bmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVm
ZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NDYyOCw4ICs0NjM2LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJ
bnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3Rv
dHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90
eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICov
LAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJ
CUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUw
RDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUx
OTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIx
QUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00NjYyLDYgKzQ2NzAs
MTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxp
bmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5j
cHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICov
LAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAor
CQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkw
RkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJ
CTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJ
CTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkw
RkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2
MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3
MTIsMTAgKzQ3MjQsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8q
IEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8q
IEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNB
cnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNB
cnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91
bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91
bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxl
ZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8s
CiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDEz
LDkgKzUwMjUsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQu
aCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUx
OEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUw
MDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0Mg
LyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyog
Vk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5s
aW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAg
Ki8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJ
MTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNjAwOCw2ICs2
MDIwLDcgQEAKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01GdW5jdGlv
blN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFE
QzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBB
NzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjI5Miw2ICs2MzA1LDcgQEAKIAkJCQkwRjIzNUJFNDE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
REIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZU
TFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5
QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVG
OTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mzk3LDYgKzc0
MTEsNyBAQAogCQkJCTE0MjgwODJFMTA3RUMwNTcwMDEzRTdCMiAvKiBDb25zdHJ1Y3REYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0YxMTg5MUI1QjQwMDMxQzdGQSAvKiBDb250ZW50
U2VhcmNoVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNDAzMDU1MTRCNDA0RTYw
MDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkZDOTIxMTFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFW
aWV3LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzgxMSw2ICs3ODI2LDcgQEAKIAkJCQk4NkM1NjhF
MDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTMzRjUwNzQxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5NzZDNjAwMDMxNzI5OCAvKiBN
YWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMEE3NTIyMUI5NEJG
QTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzQ0Uw
ODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYxMUU5MSAvKiBDb25z
b2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUs
NyArMzM1LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRh
aWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBhbnkgd2F0
Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBpbmNvcnJl
Y3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNo
ZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1cnJlbnRs
eSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNTdGls
bFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAvLyBpZiAo
IXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOworICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQsIGFuZCBz
b3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZlCisgICAg
Ly8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNlLCBpZiBm
aXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAvLyB0aGUg
Zmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVuIGl0IHdv
dWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRpb24gbGF0
ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBvZiBzdGF0
ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0aGUKKyAg
ICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dh
dGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRoZW4gdGhl
IERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJldHdlZW4g
dGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gd29y
ayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0aG91dCBh
IGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRoYXQgdGhl
IHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQgZG9lcyBp
dHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRoZSB3YXRj
aHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3YXkgb2Yg
dmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGUgREZH
IHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBpbnN0YWxs
ZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
aXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19p
bmZvID0geyAiSW5mZXJyZWRUeXBlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJl
ZFR5cGUpIH07CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQor
eworICAgIEluZmVycmVkVHlwZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SW5mZXJyZWRUeXBlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1bHQtPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJl
ZFR5cGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5
cGUtPkluZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVy
cmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGUq
IGluZmVycmVkVHlwZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKworICAgIGlmIChp
bmZlcnJlZFR5cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZS5nZXQoKSk7Cit9CisKK0luZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpT
VmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1
cm4gQm9vbGVhbjsKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
cmV0dXJuIE90aGVyOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBJ
bnQzMjsKKyAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIERvdWJsZTsK
KyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUu
YXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZzsKKyAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
IGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0
dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yOjptZXJnZShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAgICBpZiAoKnRo
aXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgIGNhc2UgQm90dG9tOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBCb29sZWFuOgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAqdGhpcyA9
IFRvcDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3aXRjaCAo
b3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAg
ICAgICAgIG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNh
c2UgSW50MzI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2Ug
RG91YmxlOgorICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE51bWJl
cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0
aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBEb3Vi
bGU6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgbV9raW5kID0gTnVtYmVyOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBU
b3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJlcjoKKyAg
ICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgaWYg
KG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgKnRo
aXMgPSBvdGhlcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhl
cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAg
IG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1
Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgKnRoaXMgPSBPYmpl
Y3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmpl
Y3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBt
X2tpbmQgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAg
IGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IGNhc2UgVG9wOgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92
ZVN0cnVjdHVyZSgpCit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgKnRoaXMgPSBPYmpl
Y3RPck90aGVyOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
OworICAgIH0KK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNv
bnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAoreworICAgIERlc2NyaXB0b3IgbWVyZ2VkID0g
KnRoaXM7CisgICAgbWVyZ2VkLm1lcmdlKG90aGVyKTsKKyAgICByZXR1cm4gKnRoaXMgPT0gbWVy
Z2VkOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVj
dHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6IiwgKm1fc3RydWN0dXJlKTsKK30KKworSW5mZXJy
ZWRUeXBlOjpJbmZlcnJlZFR5cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRU
eXBlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2lu
dCkKK3sKK30KKworSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJ
bmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2Nr
ZXIsIGNvbnN0IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5k
KCkgPT0gVG9wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2Ny
aXB0b3IobG9ja2VyKSA9PSBleHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3Rp
bGxWYWxpZChjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBpc1N0aWxsVmFsaWQobG9ja2VyLCBl
eHBlY3RlZCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7CisKKyAg
ICBtX3dhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlw
ZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdh
dGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkZXNjcmlwdG9yKCkpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIERlc2NyaXB0b3IgbXlUeXBlID0g
ZGVzY3JpcHRvcihsb2NrZXIpOworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBlID0gRGVzY3JpcHRv
cjo6Zm9yVmFsdWUodmFsdWUpOworCisgICAgbXlUeXBlLm1lcmdlKG90aGVyVHlwZSk7CisKKyAg
ICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRoZSB0eXBlIG11c3Qg
aGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICBzZXQobG9ja2Vy
LCB2bSwgbXlUeXBlKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3AoVk0mIHZtKQor
eworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgc2V0KGxvY2tl
ciwgdm0sIFRvcCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sK
KyAgICAvLyBXZSB3aWxsIHRyaWdnZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIg
bG9jay4gQ3VycmVudGx5LCB3cml0ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKKyAgICAv
LyBjb3VsZCBjaGFuZ2UuIElmIGl0IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5v
dGUgdGhhdCB3ZSBjb3VsZCBoYXZlIHVzZWQKKyAgICAvLyBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyIGluIHRoZSBjYWxsZXIsIGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1h
eWJlIHRoYXQgd291bGRuJ3QgYmUKKyAgICAvLyBhIGdvb2QgaWRlYS4KKyAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCisgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3
ZSdyZSBub3QgcmVhbGx5IGNoYW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8g
ZG8gYW55dGhpbmcuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9y
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgbmV3IGRlc2NyaXB0b3IgbXVzdCBiZSBt
b3JlIGdlbmVyYWwgdGhhbiB0aGUgcHJldmlvdXMgb25lLgorICAgIEFTU0VSVChuZXdEZXNjcmlw
dG9yLnN1YnN1bWVzKGRlc2NyaXB0b3IobG9ja2VyKSkpOworCisgICAgLy8gSWYgdGhlIG5ldyBk
ZXNjcmlwdG9ycyBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLCB0aGVuIGl0IGNhbiBvbmx5IGJl
IGJlY2F1c2Ugb25lIGlzIG51bGwuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1
cmUoKSAhPSBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBBU1NFUlQoIWRlc2Ny
aXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSB8fCAhbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7
CisKKyAgICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHR5cGUsIHNvIG1ha2Ugc3VyZSB0aGF0IGlm
IGFueW9uZSB3YXMgd2F0Y2hpbmcsIHRoZXkgZmluZCBvdXQgYWJvdXQgaXQgbm93LiBJZgorICAg
IC8vIGFueW9uZSBpcyB3YXRjaGluZywgd2UgbWFrZSBzdXJlIHRvIGdvIHRvIFRvcCBzbyB0aGF0
IHdlIGRvbid0IGRvIHRoaXMgc29ydCBvZiB0aGluZyBhZ2Fpbi4KKyAgICBpZiAobV93YXRjaHBv
aW50U2V0LnN0YXRlKCkgIT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgIC8vIFdlIGNhbm5v
dCBoYXZlIGJlZW4gaW52YWxpZGF0ZWQsIHNpbmNlIGlmIHdlIHdlcmUsIHRoZW4gd2UnZCBhbHJl
YWR5IGJlIGF0IFRvcC4KKyAgICAgICAgQVNTRVJUKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9
IElzSW52YWxpZGF0ZWQpOworCisgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGRvIGV4cGVuc2l2
ZSB0aGluZ3MgYmVjYXVzZSBzb21lIGNvbXBpbGVyIHRocmVhZCBkZWNpZGVkIHRvIHdhdGNoIHRo
aXMgdHlwZSBhbmQKKyAgICAgICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFuZ2VkLiBBc3N1bWUgdGhh
dCB0aGlzIHByb3BlcnR5IGlzIGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBkbyBhbnkgbW9yZSB0aGlu
Z3MgZm9yCisgICAgICAgIC8vIGl0LgorICAgICAgICBuZXdEZXNjcmlwdG9yID0gVG9wOworCisg
ICAgICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKCJJbmZlcnJlZCB0eXBlIGNoYW5nZWQiKTsK
KyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3Qg
aWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKQorICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcg
SW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQg
aGVyZS4KKyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1f
c3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHRoaXMsIG5l
d0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQobV9zdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQu
CisgICAgbV9raW5kID0gbmV3RGVzY3JpcHRvci5raW5kKCk7CisKKyAgICAvLyBBc3NlcnQgdGhh
dCB3ZSBkaWQgdGhpbmdzLgorICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVz
Y3JpcHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQorewor
ICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKHRoaXMpLT52bSgpOworCisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9wYXJlbnQtPm1fbG9jayk7CisgICAgCisgICAgRGVzY3JpcHRvciBu
ZXdEZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIG5ld0Rlc2NyaXB0b3IucmVt
b3ZlU3RydWN0dXJlKCk7CisgICAgCisgICAgc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3Ip
OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3Ry
dWN0dXJlKEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6
IG1fcGFyZW50KHBhcmVudCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVy
ZSkKK3sKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpmaXJlSW50
ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgbV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVy
ZSgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcChtX3BhcmVudCkt
PnZtKCk7CisKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQobV9wYXJlbnQpKTsKKyAgICAKKyAg
ICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgbV9wYXJl
bnQtPnJlbW92ZVN0cnVjdHVyZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5mZGVmIEluZmVycmVkVHlwZV9oCisjZGVmaW5lIEluZmVy
cmVkVHlwZV9oCisKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkpT
Q2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNlZCBm
b3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCisKK2Ns
YXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUoVk0m
KTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
KworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAg
ICBCb3R0b20sCisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIE90aGVyLAorICAgICAgICBJbnQz
MiwKKyAgICAgICAgRG91YmxlLAorICAgICAgICBOdW1iZXIsCisgICAgICAgIFN0cmluZywKKyAg
ICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZSwKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXIsCisgICAgICAgIE9iamVjdCwKKyAgICAgICAgT2JqZWN0T3JPdGhlciwKKyAgICAgICAg
VG9wCisgICAgfTsKKworICAgIGNsYXNzIERlc2NyaXB0b3IgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgRGVzY3JpcHRvcigpCisgICAgICAgICAgICA6IG1fa2luZChCb3R0b20pCisgICAgICAgICAg
ICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IERlc2NyaXB0b3IoS2luZCBraW5kLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIpCisg
ICAgICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1
Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBEZXNjcmlwdG9y
IGZvclZhbHVlKEpTVmFsdWUpOworCisgICAgICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlOyB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFs
dWUoSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICAgICAgICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUuaXNCb29sZWFuKCk7CisgICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQz
MjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAg
Y2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzRG91YmxlKCk7Cisg
ICAgICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNO
dW1iZXIoKTsKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5pc1N0cmluZygpOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmU7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpCisgICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2
YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAg
Y2FzZSBPYmplY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7Cisg
ICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAg
IGNhc2UgVG9wOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAg
ICAgICAgICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgdm9pZCBtZXJnZShjb25zdCBEZXNjcmlwdG9yJik7CisgICAgICAgIHZvaWQg
cmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGVz
Y3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb3RoZXIgb25lLgorICAgICAgICBib29s
IHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBjb25zdDsKKworICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5k
OworICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBDb25jdXJy
ZW50SklUTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3Jp
cHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0
dXJlLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgIH0KKyAgICBEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICB9CisgICAg
CisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3Qg
eyByZXR1cm4gZGVzY3JpcHRvcigpLmtpbmQoKTsgfQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3Jp
cHRvcigpLnN0cnVjdHVyZSgpOyB9CisKKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVy
cmVkVHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2
YW50IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShW
TSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgICAgICBpZiAoIWRlc2NyaXB0b3IobG9ja2VyKS5pbmNsdWRl
c1ZhbHVlKGxvY2tlciwgdmFsdWUpKQorICAgICAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KGxv
Y2tlciwgdm0sIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGtpbmQobG9ja2VyKSAhPSBUb3A7Cisg
ICAgfQorCisgICAgLy8gSW1tZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGlycmVsZXZhbnQuCisg
ICAgdm9pZCBtYWtlVG9wKFZNJik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVu
dGx5IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2Ny
aXB0b3IuIE5vdGUgdGhhdAorICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZv
ciBUb3AuCisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2Nr
ZXIsIGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0
b3ImKTsKKyAgICAKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBXYXRjaHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNo
cG9pbnQqKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEluZmVycmVkVHlwZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAgIHZv
aWQgd2lsbFN0b3JlVmFsdWVTbG93KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIEpT
VmFsdWUpOworICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIERl
c2NyaXB0b3IpOworICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxlIENv
bmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9
OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgOiBwdWJsaWMgV2F0Y2hwb2ludCwgcHVi
bGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJy
ZWRTdHJ1Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOworCisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7
IH07CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgpIG92ZXJyaWRlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBtX3Bh
cmVudDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAg
fTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7
CisKKyAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0
byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQorICAgIC8vIHBy
b2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVk
IGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8gdGhyZWFkLiBU
aGUgREZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0
Y2hlcy4KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkluZmVycmVkVHlwZVRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9
IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJl
ZFR5cGVUYWJsZSkgfTsKKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpj
cmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVk
VHlwZVRhYmxlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0
aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZVRhYmxl
LT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisKK1N0cnVjdHVy
ZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJy
ZWRUeXBlVGFibGUqPihjZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgCisgICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0PiB0b1JlbW92ZTsKKyAgICAK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90YWJsZSkgeworICAgICAgICBpZiAoZW50cnkudmFs
dWUtPmlzUmVsZXZhbnQoKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyeS52YWx1
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkp
OworICAgIH0KKworICAgIGZvciAoUHJvcGVydHlPZmZzZXQgb2Zmc2V0IDogdG9SZW1vdmUpCisg
ICAgICAgIG1fdGFibGUucmVtb3ZlKG9mZnNldCk7Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJy
ZWRUeXBlVGFibGU6OmdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG1fdGFibGUu
Z2V0KG9mZnNldCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgLy8gVGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHBydW5lIGludmFsaWRhdGVkIHR5cGVz
LgorICAgIGlmICghcmVzdWx0LT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAgbV90YWJsZS5yZW1v
dmUob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCBvZmZzZXQpOworfQorCitib29sIEluZmVycmVk
VHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgIEluZmVycmVkVHlwZSogdHlwZSA9IG1fdGFibGUuZ2V0KG9mZnNldCk7CisgICAgaWYg
KCF0eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodHlwZS0+d2lsbFN0b3Jl
VmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX3RhYmxlLnJl
bW92ZShvZmZzZXQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVU
YWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDb25j
dXJyZW50SklUbG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIEluZmVycmVkVHlwZSogdHlwZSA9
IG1fdGFibGUudGFrZShvZmZzZXQpOworICAgIGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdHlwZS0+bWFrZVRvcCgpOworfQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjpjcmVh
dGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGUgPSBJbmZlcnJlZFR5
cGU6OmNyZWF0ZSh2bSk7CisgICAgaWYgKCF0eXBlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGaXJlIHRoZSBiYXJyaWVyIGJlZm9y
ZSBncmFiYmluZyB0aGUgbG9jay4KKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPiB0eXBl
QmFycmllcih2bSwgdGhpcywgdHlwZSk7CisgICAgCisgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdGFibGUuYWRkKG9mZnNldCwgdHlw
ZUJhcnJpZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZp
bmUgSW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5j
bHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVy
cmVkIHR5cGVzIGZvciBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRo
YXQgc2ltcGxpZmllcyB0aGUgU3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZl
dHlwZSBlYXNpZXIgdG8gbWFuYWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdl
IGtub3cgdGhhdCB0aGlzIHRoaW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZH
IGlzIHJ1bm5pbmcuIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2Ug
bW9zdCBwcm9wZXJ0aWVzCisvLyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2Ug
bW9zdCBwcm9wZXJ0aWVzIGFyZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBw
cm9wZXJ0eSIKKy8vIGFzIGJlaW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuCisK
K2NsYXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJs
ZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBDb25jdXJyZW50SklUTG9j
ayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV90YWJsZS5pc0VtcHR5KCk7IH0KKworICAgIEluZmVycmVkVHlwZSogZ2V0KGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSW5mZXJyZWRU
eXBlKiBnZXQoUHJvcGVydHlPZmZzZXQpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJ
bmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhl
IHN0b3JlLiBJdCdzIG5vdAorICAgIC8vIHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQg
dGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3
aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5T2Zmc2V0LCBKU1ZhbHVlKTsKKworICAgIC8vIElu
dmFsaWRhdGVzIHRoZSB0eXBlIGZvciB0aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3Qg
YSBzdG9yZSBpbiBhIHJlZmxlY3RpdmUgY29udGV4dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQ
cm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBUaGlzIGNyZWF0ZXMgYSBuZXcgSW5mZXJyZWRUeXBl
IGZvciB0aGlzIHByb3BlcnR5LiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgbmVlZGVkIGJlY2F1
c2UKKyAgICAvLyB3aWxsU3RvcmVWYWx1ZSgpIGFzc3VtZXMgdGhhdCBpZiB0aGVyZSBpc24ndCBh
biBJbmZlcnJlZFR5cGUgb2JqZWN0IGZvciB0aGUgcHJvcGVydHksIHRoZW4gaXQncworICAgIC8v
IGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBjb25jbHVkZWQgdGhhdCB0aGUgcHJvcGVydHkgc2hvdWxk
IG5vdCBoYXZlIGEgdHlwZS4KKyAgICBib29sIGNyZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3Bl
cnR5KFZNJiwgUHJvcGVydHlPZmZzZXQsIEpTVmFsdWUpOworCitwcml2YXRlOgorICAgIEluZmVy
cmVkVHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8UHJvcGVydHlPZmZzZXQsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBX
VEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gVGFibGVUeXBlOworICAgIAorICAgIFRhYmxlVHlwZSBt
X3RhYmxlOworICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlVGFibGVfaAorCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTg5MTYxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIxNCw2ICsxMjE0LDggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVy
bmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwog
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
Y3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAg
aWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBAIC0xMjUzLDYgKzEyNTUsMTAgQEAgaW5s
aW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0
cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpIHsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGRvIHR5cGUgaW5mZXJlbmNlLgorICAgICAgICBpZiAoc2xv
dC5jb250ZXh0KCkgPT0gUHV0QnlJZCkKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+Y3JlYXRlSW5m
ZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAg
ICAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewpAQCAtMTI3NSw2ICsxMjgxLDEw
IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShv
ZmZzZXQpOworICAgICAgICBpZiAoc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCkKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWUodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm1ha2VUb3Aodm0sIG9mZnNldCk7CiAgICAg
ICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCkBAIC0xMjk0LDYgKzEzMDQsOCBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKICAgICAKICAg
ICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZk
ZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBpZiAoc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJ
ZCkKKyAgICAgICAgc3RydWN0dXJlLT5jcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eSh2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAx
ODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDcsMTEgKzM0NywxNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0
KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0g
bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1
cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwog
ICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1
dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdl
dChzdHJ1Y3R1cmUtPm1fb2Zmc2V0KSkKKyAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlw
ZSA9IHRydWU7CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwg
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAg
CkBAIC04MzgsNiArODQyLDQzIEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJu
YWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVlKTsKIH0KIAordm9p
ZCBTdHJ1Y3R1cmU6OmNyZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8o
KSA9PSBpbmZvKCkpOworCisgICAgLy8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJl
Zm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhh
dmUgYWxyZWFkeQorICAgIC8vIGdyYWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1h
cC4KKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlOwor
ICAgIGlmICghdGFibGUpIHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3Jl
YXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlQmFycmllcigpOworICAgICAgICBtX2lu
ZmVycmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRo
aXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0
eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhp
cyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHksIHNvIHdlIG11c3QgaGF2
ZSBhIHByb3BlcnR5IHRhYmxlCisgICAgLy8gbm93LgorICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxl
KTsKKworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHBy
b3BlcnR5TmFtZS51aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIC8vIFNpbmNlIHRo
aXMgaXMgYSBuZXcgcHJvcGVydHksIHdlIG11c3Qgbm90IGhhdmUgc2V0IGhhc0luZmVycmVkVHlw
ZSBwcmV2aW91c2x5LgorICAgIEFTU0VSVCghZW50cnktPmhhc0luZmVycmVkVHlwZSk7CisgICAg
CisgICAgaWYgKCF0YWJsZS0+Y3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkodm0sIGVu
dHJ5LT5vZmZzZXQsIHZhbHVlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHN1cGVyIHJhcmUgYW5k
IHdlaXJkLCBidXQgd2UgbmVlZCB0byBoYW5kbGUgaXQuIEl0J2xsIG9jY3VyIGlmIHRoZSB2YWx1
ZSBoYXMgYSB0eXBlIHRoYXQKKyAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0eXBlIGluZmVyZW5j
ZSBydWxlcyBmb3IuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnRyeS0+aGFzSW5m
ZXJyZWRUeXBlID0gdHJ1ZTsKK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJv
cGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxMyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7
CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7
CiAgICAgdWludDhfdCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOwogCiAg
ICAgUHJvcGVydHlNYXBFbnRyeSgpCiAgICAgICAgIDoga2V5KG51bGxwdHIpCiAgICAgICAgICwg
b2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcygwKQorICAgICAgICAs
IGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTMsNiArOTUs
NyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgICAgIDoga2V5KGtleSkKICAgICAg
ICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAg
ICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQodGhp
cy0+YXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVzKTsKICAgICB9CkBAIC0zMjMsNiArMzI2LDcgQEAg
cHVibGljOgogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAg
ICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1
dGVzKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
JiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpOwogCiAgICAgLy8gVGhpcyBpcyBh
IHNvbWV3aGF0IGludGVybmFsaXNoIG1ldGhvZC4gSXQgd2lsbCBjYWxsIHlvdXIgZnVuY3RvciB3
aGlsZSBwb3NzaWJseSBob2xkaW5nIHRoZQogICAgIC8vIFN0cnVjdHVyZSdzIGxvY2suIFRoZXJl
IGlzIG5vIGd1YXJhbnRlZSB3aGV0aGVyIHRoZSBsb2NrIGlzIGhlbGQgb3Igbm90IGluIGFueSBw
YXJ0aWN1bGFyCkBAIC00NzcsNiArNDgxLDQxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsKICAg
ICB9CiAKKyAgICBib29sIGhhc0luZmVycmVkVHlwZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEhbV9pbmZlcnJlZFR5cGVUYWJsZTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2lu
ZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgICAgICBpZiAoTElLRUxZKCF0YWJsZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gdGFibGUtPndpbGxT
dG9yZVZhbHVlKHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgaWYgKHRhYmxlLT5pc0VtcHR5
KCkpCisgICAgICAgICAgICBtX2luZmVycmVkVHlwZVRhYmxlLmNsZWFyKCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIG1ha2VUb3AoVk0m
IHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBJbmZlcnJlZFR5cGVU
YWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgICAgICBpZiAoTElL
RUxZKCF0YWJsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRhYmxlLT5tYWtlVG9w
KHZtLCBvZmZzZXQpOworICAgICAgICBpZiAodGFibGUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IG1faW5mZXJyZWRUeXBlVGFibGUuY2xlYXIoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgY3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkoVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IFRoZXNlIGNvbmRpdGlvbnMgY291bGQgcHJvYmFibHkgYmUgcmVmaW5lZC4KKyAgICAgICAgaWYg
KGlzRGljdGlvbmFyeSgpIHx8IHRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjcmVhdGVJbmZlcnJlZFR5cGVGb3JO
ZXdQcm9wZXJ0eVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIH0KKwogICAgIFBh
c3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSk7CiAgICAg
CiAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgbWF0Y2ggZW5vdWdoIHRo
YXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMKQEAgLTYyNyw2ICs2NjYs
OCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVy
dGllcyhWTSYpOwogCisgICAgdm9pZCBjcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eVNs
b3coVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOworCiAgICAgc3RhdGljIGNvbnN0IGludCBz
X21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJh
bnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCkBAIC02NTAsNiArNjkxLDgg
QEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9wZXJ0eVRh
YmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgog
ICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiAK
KyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFibGU+IG1faW5mZXJyZWRUeXBlVGFibGU7
CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBm
aXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzUsMTkgKzc1LDE5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3Rv
cmVkUHJvdG8KIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQVNTRVJUKCFpc0NvbXBp
bGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0g
aW5mbygpKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0gICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3Bl
cnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQo
KSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7Cisg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICBy
ZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7
CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7
CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworfQorCitBTFdBWVNfSU5MSU5FIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSkKK3sKICAg
ICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCkBAIC0xMDEsNiArMTAxLDcgQEAgQUxXQVlTX0lO
TElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgICAgICByZXR1cm4gaW52YWxpZE9m
ZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKKyAgICBoYXNJbmZl
cnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlOwogICAgIHJldHVybiBlbnRyeS0+b2Zm
c2V0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260312</attachid>
            <date>2015-08-31 13:28:34 -0700</date>
            <delta_ts>2015-08-31 15:24:33 -0700</delta_ts>
            <desc>wow, this is fun and easy!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70934</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkxNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NTQsNiArNzU2LDkgQEAKIAkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERG
R09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1OTg3RjJDMTY3RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29t
cGlsYXRpb25JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMUQxNkQwMkYzMDAwNTVBNURCIC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E1
MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMwREFEMDMwRkIxRUIxQTAwODJEMjA1IC8qIE5vZGVDb25zdHJ1
Y3RvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMEYxQjk0RDRE
RjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLzsgfTsKKwkJMEZGQzkyMTIxQjk0
RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkZDOTIxNDFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVk
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLzsgfTsK
IAkJMEZGQzk5RDExODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDAxODRFQzhBRDAwOUMx
MEFCIC8qIENvbnN0YW50TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRkM5OUQ0MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5l
dXRlcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGRkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBB
cnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5OUQzMTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTkwNyw2ICsxOTEyLDggQEAKIAkJMEYwNDM5NkMxQjAzREMw
QjAwOTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQ29tYmluZWRMaXZlbmVzcy5oOyBwYXRoID0gZGZnL0RGR0NvbWJpbmVk
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNUMzQjIxNjgzQ0Y4
RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRo
ID0gZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYwNzc2QkQxNEZGMDAyODAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZm
b3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uRWZm
b3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMEE3NTIwMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5mZXJyZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYw
QTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwQjgzOTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50VGh1bmtzLmNwcDsgcGF0aCA9IGxs
aW50L0xMSW50VGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgz
OTgxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IExMSW50VGh1bmtzLmg7IHBhdGggPSBsbGludC9MTEludFRodW5rcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyog
Q29kZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NzIsNiArMjU3OSw5IEBACiAJCTBGRjky
MkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4
dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMEZGQjZDMzYx
QUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTAxQjk0RDRERjAwNzFE
RDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZmVycmVkVHlwZVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgcGF0
aCA9IGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5l
dXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ2MjgsOCArNDYzOCw4IEBACiAJCQkJQkMwMkU5OEIwRTE4M0UzODAwMEY5Mjk3IC8qIEVycm9y
SW5zdGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90
b3R5cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3Rv
dHlwZS5oICovLAotCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLywKKwkJ
CQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi8sCiAJCQkJMEYxMkRF
MEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovLAogCQkJCTBGMTJERTBF
MTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8sCiAJCQkJMTQyOUQ4NzcwRUQy
MUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLApAQCAtNDY2Miw2ICs0Njcy
LDEwIEBACiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5s
aW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUu
Y3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAq
LywKKwkJCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCAqLywK
KwkJCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8sCisJCQkJ
MEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLywKKwkJ
CQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLywKIAkJ
CQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8sCiAJCQkJ
MEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4
NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCkBAIC00
NzEyLDEwICs0NzI2LDEwIEBACiAJCQkJMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAogCQkJCUE3QkRBRUM0MTdGNEVBMTQwMEY2MTQwQyAv
KiBKU0FycmF5SXRlcmF0b3IuY3BwICovLAogCQkJCUE3QkRBRUM1MTdGNEVBMTQwMEY2MTQwQyAv
KiBKU0FycmF5SXRlcmF0b3IuaCAqLywKLQkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyog
SlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKLQkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyog
SlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJOEIwRjQyNEIxQUJENkRFMjAwMzkxN0VBIC8qIEpT
QXJyb3dGdW5jdGlvbi5jcHAgKi8sCiAJCQkJOEIwRjQyNEExQUJENkQyRjAwMzkxN0VBIC8qIEpT
QXJyb3dGdW5jdGlvbi5oICovLAorCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0Jv
dW5kRnVuY3Rpb24uY3BwICovLAorCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0Jv
dW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxs
ZWUuY3BwICovLAogCQkJCTY1N0NGNDU3MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oICov
LAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAvKiBKU0NlbGwuY3BwICovLApAQCAtNTAx
Myw5ICs1MDI3LDkgQEAKIAkJCQkwRkUwNTAyNDFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0
LmggKi8sCiAJCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAqLywKIAkJCQlF
MThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAqLywKLQkJCQlGRTkwQkIzQTFCN0NGNjRF
MDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8sCiAJCQkJRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0ND
IC8qIFZNRW50cnlTY29wZS5jcHAgKi8sCiAJCQkJRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8q
IFZNRW50cnlTY29wZS5oICovLAorCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlu
bGluZXMuaCAqLywKIAkJCQlGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3Bw
ICovLAogCQkJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovLAogCQkJ
CTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywKQEAgLTUxNjcsNiAr
NTE4MSw3IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmgg
Ki8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVu
dGlmaWVycy5oICovLAorCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVk
SW5mZXJyZWRUeXBlLmggKi8sCiAJCQkJQzJDMEY3Q0IxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8sCiAJCQkJQzJDMEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8q
IERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovLAogCQkJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThG
NSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovLApAQCAtNTg5NSw2ICs1OTEwLDcgQEAK
IAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDNDQyQ0IyNTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1dHMuanNv
biBpbiBIZWFkZXJzICovLAogCQkJCUZFMUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVFMEMwMDFCNEFGQjg1
MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2
NzhGOTExQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLApAQCAtNjAwOCw2ICs2MDI0LDcgQEAKIAkJCQkwRkJEN0U2OTE0NDc5
OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkx
Qjg2OEVCNzAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYg
LyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NkMxQUUz
MzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjI5
Miw2ICs2MzA5LDcgQEAKIAkJCQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVG
b3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBG
VExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAw
MzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5o
IGluIEhlYWRlcnMgKi8sCkBAIC03Mzk3LDYgKzc0MTUsNyBAQAogCQkJCTE0MjgwODJFMTA3RUMw
NTcwMDEzRTdCMiAvKiBDb25zdHJ1Y3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0Qy
M0YxMTg5MUI1QjQwMDMxQzdGQSAvKiBDb250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRU
eXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkx
IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
QjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NzgxMSw2ICs3ODMwLDcgQEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9B
c3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQxQjg0MjFDMDAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MjkwMDlDMTc5NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNv
bGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYx
MkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QjZBNzREMThDNkRCQTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShy
ZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hw
b2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDM5IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAor
CisgICAgLy8gTm90ZSB0aGF0IGZvciBhbnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJv
bSB0aGUgREZHLCBpdCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAg
IC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxs
KCkKKyAgICAvLworICAgIC8vIENvbmN1cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRv
OgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZv
cm0gb3B0aW1pemF0aW9uczsKKyAgICAvLyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8g
ICAgIHJldHJ5IGNvbXBpbGF0aW9uOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcg
YWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQsIGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5k
IGludmFsaWRhdGUoKSB3aWxsIGxlYXZlCisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNT
dGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNlLCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGlu
dGVybGVhdmVkIGJldHdlZW4KKyAgICAvLyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sg
YW5kIHRoZSBzZWNvbmQgb25lLCB0aGVuIGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRv
IHJldHJ5CisgICAgLy8gY29tcGlsYXRpb24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlm
IHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBvZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1p
emUgZm9yLCBidXQgaW52YWxpZGF0ZSB0aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgor
ICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJl
QWxsKCkKKyAgICAvLworICAgIC8vIHRoZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQg
eW91IGludmFsaWRhdGVkIHN0YXRlIGJldHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAg
ICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAg
IC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRo
ZW4sIHRoZSBERkcgd2lsbCBrbm93IHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBi
ZWVuIGludmFsaWRhdGVkIHdoZW4gaXQgZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisg
ICAgLy8gLSBEbyBub3QgZXhwb3NlIHRoZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVj
dGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8g
ICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxp
ZCB3aGVuIHRoZSBERkcgY29kZSBpcyBpbnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hl
ZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4Myw4ICsy
MDgzLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSku
bWFrZUhlYXBUb3AoKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBkYXRh
LmluZmVycmVkVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlz
aW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTEgQEAgdm9pZCBBYnN0cmFjdFZh
bHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAor
dm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQo
KSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGNsZWFyKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAg
c2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6T3RoZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgc2V0VHlwZShTcGVjSW50
MzIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkRvdWJsZToKKyAg
ICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVO
dW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoK
KyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVy
ZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAg
bWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIHNl
dFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiBn
cmFwaCwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2RlKQogewogICAgIGlmIChy
ZXByZXNlbnRhdGlvbiA9PSBOb2RlUmVzdWx0RG91YmxlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5MTYxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRl
ICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xv
YmJlclN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxs
LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5o
IgpAQCAtMjE1LDYgKzIxNiw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworCiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVz
ZW50YXRpb24oR3JhcGgmLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqID0gbnVsbHB0
cik7CiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlKik7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJ
bmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3RhdGlvbiBmb3IgYW4gSW5mZXJy
ZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0byBoYXZlIGEgbGl2ZQorLy8g
SW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVjdCBoYXMgdGhlIHR5cGUgdGhh
dCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZEluZmVycmVkVHlwZSB7CitwdWJs
aWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0
cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoSW5mZXJyZWRU
eXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZXhwZWN0ZWQpCisg
ICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZXhwZWN0ZWQoZXhwZWN0ZWQp
CisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwg
bV9leHBlY3RlZChUb3ApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBtX29iamVjdCAmJiBtX2V4cGVjdGVkOyB9CisKKyAgICBJbmZl
cnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZDsg
fQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVjdGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChX
YXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAgbV9vYmplY3QtPmFk
ZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2V4cGVjdGVk
ID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2V4cGVj
dGVkID09IFRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBlKj46Omhhc2gobV9vYmplY3Qp
ICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwgY29udGV4dCksICIgZm9yICIs
IFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBjb250ZXh0
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKiBtX29iamVjdDsKKyAgICBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKK307CisKK3N0cnVjdCBEZXNpcmVk
SW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwgY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Fm
ZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6
OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpEZXNpcmVkSW5m
ZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVk
SW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZElu
ZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHAJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTEgQEAg
dm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOgogICAgIH0KIH0KIAordm9p
ZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IERl
c2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIGtleS5h
ZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwogRGVzaXJlZFdhdGNo
cG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRl
c2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5OCwxMSBAQCB2b2lkIERlc2lyZWRX
YXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMu
YWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHko
Y29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQoreworICAgIG1faW5mZXJyZWRUeXBlcy5h
ZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRj
aCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlB
ZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1v
bkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0
YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29t
bW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1v
bkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNv
bnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxs
VmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAg
ICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVmZmVy
Vmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRz
LmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJl
U3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7
CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApAQCAtMTI3LDYgKzEzOSw3IEBAIHZv
aWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFAKICAgICBvdXQucHJpbnQoIiAg
ICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0
KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQo
bV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIE9iamVj
dCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB0eXBlczog
IiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRl
ICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIgog
I2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5o
IgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCkBAIC05MSw2ICs5MiwxOCBA
QCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvCiAgICAgfQogfTsKIAor
c3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRp
YyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsKKyAgICB9CisgICAg
c3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAg
b3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50
ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1OSw2ICsxNzIsMTAgQEAgcHVibGlj
OgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVj
dGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKICAgICAvLyB0aGUg
cmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgogICAg
IHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisKKyAgICAv
LyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNl
IEdyYXBoOjp3YXRjaERlc2lyZWRUeXBlKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWly
ZWQgR0MgbWFnaWMuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlw
ZSYpOwogICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCkBAIC0xODYs
NiArMjAzLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3Ry
dWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29u
c3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5m
ZXJyZWRUeXBlcy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAKICAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwpAQCAtMTk2LDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgR2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+
IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5
QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZp
ZXdzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRp
b24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1
cmVTZXRzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RGVzaXJlZEluZmVycmVkVHlw
ZSwgSW5mZXJyZWRUeXBlQWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODcsNiArODg3LDE3IEBAIGJvb2wgR3JhcGg6Omlz
U2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwKICAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRh
aW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOwogfQogCitib29sIEdyYXBoOjp3YXRj
aERlc2lyZWRUeXBlKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKK3sKKyAgICBpZiAo
IWtleS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9wbGFu
LndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkub2JqZWN0KCkpOworICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGtleS5leHBlY3RlZCgpLnN0cnVjdHVyZSgpKQorICAgICAgICByZWdp
c3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXpp
bHkoa2V5KTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5p
cXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29k
ZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSw5IEBAIHB1YmxpYzoKICAg
ICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2Jq
ZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhpcyBpcwogICAgIC8vIGNvbXB1dGVk
IGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlv
bigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNl
dCk7CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlk
LiBNYWtlcyBzdXJlIHRoYXQgdGhlIEdDIGtub3dzIHdoYXQncyBnb2luZyBvbi4KKyAgICBib29s
IHdhdGNoRGVzaXJlZFR5cGUoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0
LDEyIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsK
KworICAgIC8vIEJvdGggcHV0cyBhbmQgZ2V0cyBoYXZlIGFuIGluZmVycmVkIHR5cGUgZGVzY3Jp
cHRvciwgYmVjYXVzZSBpZiB0aGUgcHJvcGVydHkgaGFzIGEgdHlwZSwgd2Ugd2lsbAorICAgIC8v
IHdhdGNoIGl0LiBGb3IgZ2V0cywgdGhpcyBpcyBwcm9maXRhYmxlIGJlY2F1c2UgaXQgYWxsb3dz
IHVzIHRvIGF2b2lkIHNvbWUgdHlwZSBjaGVja3MuIEZvciBwdXRzLAorICAgIC8vIGl0J3MgcHJv
Zml0YWJsZSBiZWNhdXNlIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgd2UgcmVjb21waWxlIGlmIHRo
ZSBjaGVja3MgdGhhdCB3ZSBkaWQgZW1pdCBhcmUgbm90CisgICAgLy8gbmVlZGVkIGFueW1vcmUu
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKIH07CiAKIHN0cnVj
dCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJ
bmZlcnJlZFR5cGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZSIsIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSW5mZXJyZWRUeXBlKSB9OworCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZTo6
Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZSh2bSk7
CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVy
cmVkVHlwZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7
CisgICAgaW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsKK30KKwor
U3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENl
bGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2Vs
bCk7CisKKyAgICBpZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRv
ci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUuZ2V0
KCkpOworfQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yOjpmb3JWYWx1ZShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4o
KSkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQor
ICAgICAgICByZXR1cm4gSW50MzI7CisgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpCisgICAgICAg
IHJldHVybiBEb3VibGU7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlc2NyaXB0b3Io
T2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgcmV0
dXJuIE9iamVjdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVG9wOworfQorCit2b2lk
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIp
Cit7CisgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgKnRoaXMgPSBvdGhl
cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICBjYXNlIFN0cmluZzoK
KyAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE90aGVyOgor
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAg
ICBtX2tpbmQgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICBjYXNlIEludDMyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkg
eworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAg
ICBtX2tpbmQgPSBOdW1iZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIGNhc2UgRG91YmxlOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIG1fa2lu
ZCA9IE51bWJlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
Y2FzZSBOdW1iZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
KyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkgeworICAg
ICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhp
cyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3Ro
ZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0g
VG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJl
ID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Cisg
ICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JP
dGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAg
IHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICBjYXNlIE90aGVy
OgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICBz
d2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6
CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2Ug
T2JqZWN0OgorICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICBjYXNlIFRvcDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yOjpyZW1vdmVTdHJ1Y3R1cmUoKQoreworICAgIHN3aXRjaCAobV9raW5kKSB7Cisg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAg
ICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yOjpzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBEZXNj
cmlwdG9yIG1lcmdlZCA9ICp0aGlzOworICAgIG1lcmdlZC5tZXJnZShvdGhlcik7CisgICAgcmV0
dXJuICp0aGlzID09IG1lcmdlZDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgaWYgKG1fc3RydWN0dXJlKQorICAg
ICAgICBvdXQucHJpbnQoIjoiLCBpbkNvbnRleHQoKm1fc3RydWN0dXJlLCBjb250ZXh0KSk7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitJbmZlcnJl
ZFR5cGU6OkluZmVycmVkVHlwZShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5
cGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX3dhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50
KQoreworfQorCitJbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKQoreworfQorCitib29sIElu
ZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tl
ciwgY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVkLmtpbmQo
KSA9PSBUb3ApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZGVzY3Jp
cHRvcihsb2NrZXIpID09IGV4cGVjdGVkOworfQorCitib29sIEluZmVycmVkVHlwZTo6aXNTdGls
bFZhbGlkKGNvbnN0IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChsb2NrZXIsIGV4
cGVjdGVkKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKS5raW5kKCkgIT0gVG9wKTsKKworICAg
IG1fd2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBl
OjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCit7CisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBhZGRXYXRjaHBvaW50KGxvY2tlciwgd2F0
Y2hwb2ludCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyksICI6IiwgZGVzY3JpcHRv
cigpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBEZXNjcmlwdG9yIG15VHlwZSA9IGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICBEZXNjcmlwdG9y
IG90aGVyVHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVlKTsKKworICAgIG15VHlwZS5t
ZXJnZShvdGhlclR5cGUpOworCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSAhPSBteVR5
cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBw
YXRoLgorCisgICAgc2V0KGxvY2tlciwgdm0sIG15VHlwZSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjptYWtlVG9wKFZNJiB2bSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIHNldChsb2NrZXIsIHZtLCBUb3ApOworfQorCit2b2lkIEluZmVycmVkVHlw
ZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlw
dG9yIG5ld0Rlc2NyaXB0b3IpCit7CisgICAgLy8gV2Ugd2lsbCB0cmlnZ2VyIHdyaXRlIGJhcnJp
ZXJzIHdoaWxlIGhvbGRpbmcgb3VyIGxvY2suIEN1cnJlbnRseSwgd3JpdGUgYmFycmllcnMgZG9u
J3QgR0MsIGJ1dCB0aGF0CisgICAgLy8gY291bGQgY2hhbmdlLiBJZiBpdCBkb2VzLCB3ZSBkb24n
dCB3YW50IHRvIGRlYWRsb2NrLiBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSB1c2VkCisgICAgLy8g
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlciBp
cyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCisgICAgLy8gYSBnb29k
IGlkZWEuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAg
IC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2luZyB0aGUgdHlwZSwg
dGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChkZXNjcmlwdG9yKGxv
Y2tlcikgPT0gbmV3RGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5l
dyBkZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4K
KyAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJzdW1lcyhkZXNjcmlwdG9yKGxvY2tlcikpKTsK
KworICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRvcnMgaGF2ZSBkaWZmZXJlbnQgc3RydWN0dXJl
cywgdGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNlIG9uZSBpcyBudWxsLgorICAgIGlmIChkZXNj
cmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0gbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkK
KyAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgfHwgIW5ld0Rl
c2NyaXB0b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8gV2UgYXJlIGNoYW5naW5nIHRoZSB0eXBl
LCBzbyBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUgd2FzIHdhdGNoaW5nLCB0aGV5IGZpbmQgb3V0
IGFib3V0IGl0IG5vdy4gSWYKKyAgICAvLyBhbnlvbmUgaXMgd2F0Y2hpbmcsIHdlIG1ha2Ugc3Vy
ZSB0byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24ndCBkbyB0aGlzIHNvcnQgb2YgdGhpbmcgYWdh
aW4uCisgICAgaWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IENsZWFyV2F0Y2hwb2ludCkg
eworICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVuIGludmFsaWRhdGVkLCBzaW5jZSBpZiB3
ZSB3ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBUb3AuCisgICAgICAgIEFTU0VSVChtX3dh
dGNocG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKKworICAgICAgICAvLyBXZSdy
ZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdzIGJlY2F1c2Ugc29tZSBjb21waWxlciB0aHJl
YWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5kCisgICAgICAgIC8vIHRoZW4gdGhlIHR5
cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBjcmF6eSwgYW5kIGRvbid0
IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgorICAgICAgICAvLyBpdC4KKyAgICAgICAgbmV3
RGVzY3JpcHRvciA9IFRvcDsKKworICAgICAgICBtX3dhdGNocG9pbnRTZXQuZmlyZUFsbCgiSW5m
ZXJyZWQgdHlwZSBjaGFuZ2VkIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBvbGQgSW5m
ZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgIGlmICgh
bmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRy
OworCisgICAgLy8gQWRkIGEgbmV3IEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBuZWVk
IG9uZSBub3cuCisgICAgaWYgKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpIHsKKyAgICAgICAg
aWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWdyZWUgb24gdGhl
IHN0cnVjdHVyZXMgaWYgd2UgZ2V0IGhlcmUuCisgICAgICAgICAgICBBU1NFUlQobmV3RGVzY3Jp
cHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZmVy
cmVkU3RydWN0dXJlPih0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KG1f
c3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmFsbHksIHNl
dCB0aGUgZGVzY3JpcHRvciBraW5kLgorICAgIG1fa2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgp
OworCisgICAgLy8gQXNzZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KKyAgICBBU1NFUlQoZGVzY3Jp
cHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6
cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0o
KTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fcGFyZW50LT5tX2xvY2spOwor
ICAgIAorICAgIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvciA9IGRlc2NyaXB0b3IobG9ja2VyKTsK
KyAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVyZSgpOworICAgIAorICAgIHNldChsb2Nr
ZXIsIHZtLCBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVk
U3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVyZShJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgLCBtX3N0cnVjdHVy
ZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZl
cnJlZFN0cnVjdHVyZTo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKQoreworICAgIG1f
cGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVy
cmVkU3RydWN0dXJlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgVk0mIHZtID0g
KkhlYXA6OmhlYXAobV9wYXJlbnQpLT52bSgpOworCisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
KG1fcGFyZW50KSk7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5n
ZXQoKSkpCisgICAgICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSW5mZXJyZWRUeXBlOjpLaW5k
IGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJv
dHRvbToKKyAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAg
ICAgb3V0LnByaW50KCJPdGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OkludDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRv
dWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoK
KyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Cisg
ICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIG91dC5wcmlu
dCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RPck90aGVyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBvdXQucHJpbnQo
IlRvcCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luZmRlZiBJbmZlcnJlZFR5cGVfaAorI2RlZmluZSBJbmZlcnJlZFR5cGVfaAor
CisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZl
cmVuY2Ugb2YgdGhlIHR5cGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgorCitjbGFzcyBJbmZlcnJl
ZFR5cGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2Vs
bCBCYXNlOworCisgICAgc3RhdGljIEluZmVycmVkVHlwZSogY3JlYXRlKFZNJik7CisKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNM
QVJFX0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAor
ICAgICAgICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAg
IERvdWJsZSwKKyAgICAgICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcsCisgICAgICAgIE9iamVj
dFdpdGhTdHJ1Y3R1cmUsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLAorICAg
ICAgICBPYmplY3QsCisgICAgICAgIE9iamVjdE9yT3RoZXIsCisgICAgICAgIFRvcAorICAgIH07
CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlc2NyaXB0
b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQoQm90dG9tKQorICAgICAgICAgICAgLCBtX3N0cnVj
dHVyZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBEZXNjcmlwdG9y
KEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyKQorICAgICAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShK
U1ZhbHVlKTsKKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBCb3R0b20gJiYgIW1fc3RydWN0dXJl
OworICAgICAgICB9CisKKyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmU7IH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1Zh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
ICAgICAgICAgY2FzZSBCb3R0b206CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jv
b2xlYW4oKTsKKyAgICAgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAgICAgICBjYXNlIERv
dWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNEb3VibGUoKTsKKyAgICAgICAg
ICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc051bWJlcigp
OworICAgICAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmlzU3RyaW5nKCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBU
b3A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAgICAg
JiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV1RG
OjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSBeIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX2tpbmQpOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgbWVyZ2UoY29u
c3QgRGVzY3JpcHRvciYpOworICAgICAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRlc2NyaXB0b3IgaXMgbW9yZSBnZW5lcmFsIHRo
YW4gdGhlIG90aGVyIG9uZS4KKyAgICAgICAgYm9vbCBzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9y
JikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBLaW5kIG1fa2luZDsKKyAgICAgICAgU3RydWN0dXJl
KiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSBj
b25zdCB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBEZXNj
cmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkgOiBu
dWxscHRyKTsKKyAgICB9CisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QKKyAgICB7
CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJl
dHVybiBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0b3Io
KS5raW5kKCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZShjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0b3IoKS5zdHJ1Y3R1cmUoKTsg
fQorCisgICAgYm9vbCBpc1JlbGV2YW50KCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IFRvcDsg
fQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgaXMgc3RpbGwgcmVs
ZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdCByZWxldmFudCBpZiBpdCdzIFRvcC4KKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAgICAgaWYgKCFkZXNjcmlwdG9yKGxvY2tlcikuaW5jbHVkZXNWYWx1ZShsb2NrZXIsIHZhbHVl
KSkKKyAgICAgICAgICAgIHdpbGxTdG9yZVZhbHVlU2xvdyhsb2NrZXIsIHZtLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiBraW5kKGxvY2tlcikgIT0gVG9wOworICAgIH0KKworICAgIC8vIEltbWVk
aWF0ZWx5IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50LgorICAgIHZvaWQgbWFrZVRvcChWTSYp
OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5zZSB0byB3
YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRoYXQKKyAg
ICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgorICAgIGJvb2wgY2Fu
V2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9y
Jik7CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7CisgICAgCisgICAgdm9p
ZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hw
b2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUo
Vk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAgICB2b2lkIHdpbGxTdG9yZVZhbHVlU2xv
dyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBKU1ZhbHVlKTsKKyAgICB2b2lkIHNl
dChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9yKTsKKyAgICB2b2lk
IHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xv
Y2s7CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKKworICAgIGNsYXNzIEluZmVy
cmVkU3RydWN0dXJlIDogcHVibGljIFdhdGNocG9pbnQsIHB1YmxpYyBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlKEluZmVycmVk
VHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJvdGVjdGVk
OgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7
CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEluZmVycmVkVHlwZSogbV9wYXJlbnQ7CisgICAgICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCisgICAgLy8gTk9URTogSWYg
dGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBp
bXBsaWVzIHRoYXQgaXQgd291bGRuJ3QgYmUKKyAgICAvLyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0
IGFnYWluLiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGlzIG5ldmVy
IGV4cG9zZWQgdG8gdGhlIERGRworICAgIC8vIHRocmVhZC4gVGhlIERGRyB3aWxsIHVzZSB0aGUg
SW5mZXJyZWRUeXBlIGFzIHRoZSB0aGluZyB0aGF0IGl0IHdhdGNoZXMuCisgICAgSW5saW5lV2F0
Y2hwb2ludFNldCBtX3dhdGNocG9pbnRTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
SW5mZXJyZWRUeXBlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBJ
bmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZl
cnJlZFR5cGVUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5o
IgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3Qg
Q2xhc3NJbmZvIEluZmVycmVkVHlwZVRhYmxlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGVUYWJs
ZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlVGFibGUpIH07CisKK0lu
ZmVycmVkVHlwZVRhYmxlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAg
ICBJbmZlcnJlZFR5cGVUYWJsZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SW5mZXJyZWRUeXBlVGFibGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGVUYWJsZSh2bSk7CisgICAg
cmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGVUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJy
ZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBl
VGFibGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZS0+SW5mZXJyZWRUeXBlVGFibGU6
On5JbmZlcnJlZFR5cGVUYWJsZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZVRhYmxl
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlVGFi
bGUqIGluZmVycmVkVHlwZVRhYmxlID0ganNDYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7
CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAorICAgIFZl
Y3RvcjxQcm9wZXJ0eU9mZnNldD4gdG9SZW1vdmU7CisgICAgCisgICAgZm9yIChhdXRvJiBlbnRy
eSA6IG1fdGFibGUpIHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICB9CisKKyAgICBmb3Ig
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCA6IHRvUmVtb3ZlKQorICAgICAgICBtX3RhYmxlLnJlbW92
ZShvZmZzZXQpOworfQorCitJbmZlcnJlZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFibGU6OmNs
b25lKFZNJiB2bSkKK3sKKyAgICBWZWN0b3I8VGFibGVUeXBlOjpLZXlWYWx1ZVBhaXJUeXBlLCA4
PiB0b0FkZDsKKyAgICAKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3RhYmxlKSB7CisgICAgICAg
ICAgICBpZiAoZW50cnkudmFsdWUtPmlzUmVsZXZhbnQoKSkKKyAgICAgICAgICAgICAgICB0b0Fk
ZC5hcHBlbmQoZW50cnkpOworICAgICAgICB9CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlVGFi
bGUqIHJlc3VsdCA9IGNyZWF0ZSh2bSk7CisKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogdG9BZGQp
CisgICAgICAgIHJlc3VsdC0+bV90YWJsZS5hZGQoZW50cnkua2V5LCBXcml0ZUJhcnJpZXI8SW5m
ZXJyZWRUeXBlPih2bSwgcmVzdWx0LCBlbnRyeS5nZXQoKSkpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIElu
ZmVycmVkVHlwZSogcmVzdWx0ID0gbV90YWJsZS5nZXQob2Zmc2V0KTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMgb3Bwb3J0dW5p
dHkgdG8gcHJ1bmUgaW52YWxpZGF0ZWQgdHlwZXMuCisgICAgaWYgKCFyZXN1bHQtPmlzUmVsZXZh
bnQoKSkgeworICAgICAgICBtX3RhYmxlLnJlbW92ZShvZmZzZXQpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbmZlcnJlZFR5cGUq
IEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGdldChsb2NrZXIs
IG9mZnNldCk7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKFZN
JiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgSW5mZXJyZWRUeXBlKiB0eXBlID0g
bV90YWJsZS5nZXQob2Zmc2V0KTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICh0eXBlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIG1fdGFibGUucmVtb3ZlKG9mZnNldCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjptYWtlVG9wKFZNJiB2bSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENvbmN1cnJlbnRKSVRsb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgSW5mZXJyZWRUeXBlKiB0eXBlID0gbV90YWJsZS50YWtlKG9mZnNldCk7CisgICAg
aWYgKCF0eXBlKQorICAgICAgICByZXR1cm47CisKKyAgICB0eXBlLT5tYWtlVG9wKCk7Cit9CisK
K2Jvb2wgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5
KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIElu
ZmVycmVkVHlwZSogdHlwZSA9IEluZmVycmVkVHlwZTo6Y3JlYXRlKHZtKTsKKyAgICBpZiAoIXR5
cGUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIEZpcmUgdGhlIGJhcnJpZXIgYmVmb3JlIGdyYWJiaW5nIHRoZSBsb2NrLgorICAgIFdy
aXRlQmFycmllcjxJbmZlcnJlZFR5cGU+IHR5cGVCYXJyaWVyKHZtLCB0aGlzLCB0eXBlKTsKKyAg
ICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGF1dG8gcmVz
dWx0ID0gbV90YWJsZS5hZGQob2Zmc2V0LCB0eXBlQmFycmllcik7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSW5mZXJyZWRUeXBlVGFibGVfaAorI2RlZmluZSBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIEEgdGFibGUgb2YgaW5mZXJyZWQgdHlwZXMgZm9yIHNvbWUgc3RydWN0dXJl
LiBUaGlzIGlzIGEgSlNDZWxsIGJlY2F1c2UgdGhhdCBzaW1wbGlmaWVzIHRoZSBTdHJ1Y3R1cmUK
Ky8vIGRlc3RydWN0b3IgYW5kIG1ha2VzIGxpZmV0eXBlIGVhc2llciB0byBtYW5hZ2UuIEZvciBl
eGFtcGxlLCBzaW5jZSBpdCdzIGEgY2VsbCwgd2Uga25vdyB0aGF0IHRoaXMgdGhpbmcKKy8vIGNh
bm5vdCBiZSBkZWxldGVkIHdoaWxlIHRoZSBERkcgaXMgcnVubmluZy4gVGhpcyBpcyBzZXBhcmF0
ZSBmcm9tIFByb3BlcnR5VGFibGUgYmVjYXVzZSBtb3N0IHByb3BlcnRpZXMKKy8vIHdpbGwgbm90
IGhhdmUgYW4gSW5mZXJyZWRUeXBlLCBzaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJlIGluIGRpY3Rp
b25hcmllcyAoaWYgeW91IHRoaW5rIG9mICJhIHByb3BlcnR5IgorLy8gYXMgYmVpbmcgImEgcHJv
cGVydHkgaW4gc29tZSBTdHJ1Y3R1cmUiKS4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwor
CisgICAgc3RhdGljIEluZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworICAgIEluZmVycmVkVHlwZVRhYmxlKiBjbG9uZShWTSYpOworCisgICAgQ29uY3Vy
cmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAgICBJbmZlcnJlZFR5
cGUqIGdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpOworICAg
IEluZmVycmVkVHlwZSogZ2V0KFByb3BlcnR5T2Zmc2V0KTsKKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5IGlzIHN0aWxsIHJlbGV2YW50
IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QKKyAgICAvLyByZWxldmFudCBpZiBpdCdzIFRvcC4g
Tm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5hbGx5IHBydW5lIFRvcCBlbnRyaWVzLgor
ICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9wZXJ0eU9mZnNldCwgSlNWYWx1ZSk7CisK
KyAgICAvLyBJbnZhbGlkYXRlcyB0aGUgdHlwZSBmb3IgdGhlIHByb3BlcnR5LiBVc2VmdWwgaWYg
d2UgZGV0ZWN0IGEgc3RvcmUgaW4gYSByZWZsZWN0aXZlIGNvbnRleHQuCisgICAgdm9pZCBtYWtl
VG9wKFZNJiwgUHJvcGVydHlPZmZzZXQpOworCisgICAgLy8gVGhpcyBjcmVhdGVzIGEgbmV3IElu
ZmVycmVkVHlwZSBmb3IgdGhpcyBwcm9wZXJ0eS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIG5l
ZWRlZCBiZWNhdXNlCisgICAgLy8gd2lsbFN0b3JlVmFsdWUoKSBhc3N1bWVzIHRoYXQgaWYgdGhl
cmUgaXNuJ3QgYW4gSW5mZXJyZWRUeXBlIG9iamVjdCBmb3IgdGhlIHByb3BlcnR5LCB0aGVuIGl0
J3MKKyAgICAvLyBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgY29uY2x1ZGVkIHRoYXQgdGhlIHByb3Bl
cnR5IHNob3VsZCBub3QgaGF2ZSBhIHR5cGUuCisgICAgYm9vbCBjcmVhdGVJbmZlcnJlZFR5cGVG
b3JOZXdQcm9wZXJ0eShWTSYsIFByb3BlcnR5T2Zmc2V0LCBKU1ZhbHVlKTsKKworcHJpdmF0ZToK
KyAgICBJbmZlcnJlZFR5cGVUYWJsZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGVUYWJsZSgpOwor
CisgICAgdHlwZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBXcml0ZUJhcnJpZXI8SW5mZXJy
ZWRUeXBlPiwgV1RGOjpJbnRIYXNoPFByb3BlcnR5T2Zmc2V0PiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czxQcm9wZXJ0eU9mZnNldD4+IFRhYmxlVHlwZTsKKyAgICAKKyAgICBU
YWJsZVR5cGUgbV90YWJsZTsKKyAgICBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZVRhYmxlX2gKKworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE4
OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMTQsNiArMTIxNCw4IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbnRlcm5hbCgKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0
dXJlKHZtKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICBB
U1NFUlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJyZWRUeXBlcygpKTsKKyAgICAgICAgCiAgICAgICAg
IHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7
CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewpAQCAtMTI1Myw2ICsxMjU1
LDEwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7
CisgICAgICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBkbyB0eXBlIGluZmVyZW5jZS4KKyAgICAg
ICAgaWYgKHNsb3QuY29udGV4dCgpID09IFB1dEJ5SWQpCisgICAgICAgICAgICBzdHJ1Y3R1cmUt
PmNyZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
KTsKKyAgICAgICAgCiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGN1cnJl
bnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKQEAgLTEyNjks
MTIgKzEyNzUsMjIgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAog
ICAgIH0KIAogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICBi
b29sIGhhc0luZmVycmVkVHlwZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKICAgICBpZiAo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQ
dXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAgIGJv
b2wgaXNTdGlsbFZhbGlkOworICAgICAgICAgICAgaWYgKHNsb3QuY29udGV4dCgpID09IFB1dEJ5
SWQpCisgICAgICAgICAgICAgICAgaXNTdGlsbFZhbGlkID0gc3RydWN0dXJlLT53aWxsU3RvcmVW
YWx1ZSh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaXNTdGlsbFZhbGlkID0gc3RydWN0dXJlLT5tYWtlVG9wKHZtLCBvZmZzZXQpOworICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFpc1N0aWxsVmFsaWQpKQorICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+dXBkYXRlSGFzSW5mZXJyZWRUeXBlRm9yUHJvcGVydHkodm0sIHByb3BlcnR5TmFtZSk7
CisgICAgICAgIH0KICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNl
dCk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAKQEAgLTEyOTQsNiAr
MTMxMCw4IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9p
bnRGaXJlOwogICAgIAogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBz
bG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOworICAgIGlmIChzbG90LmNv
bnRleHQoKSA9PSBQdXRCeUlkKQorICAgICAgICBzdHJ1Y3R1cmUtPmNyZWF0ZUluZmVycmVkVHlw
ZUZvck5ld1Byb3BlcnR5KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICAKICAgICB2YWxp
ZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NywxMSArMzQ3LDE1IEBAIHZvaWQg
U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBlbHNlCiAgICAgICAgIHBy
b3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKIAorICAgIEluZmVycmVkVHlwZVRh
YmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworCiAgICAgZm9yIChz
aXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3Vz
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnko
c3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBz
dHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOworICAgICAgICBpZiAodHlwZVRhYmxl
ICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9vZmZzZXQpKQorICAgICAgICAgICAgZW50
cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQo
ZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFu
Z2UpOwogICAgIH0KICAgICAKQEAgLTQ2MSw2ICs0NjUsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblBy
ZXZpb3VzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5u
ZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7
CisgICAgaWYgKHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZSkgeworICAgICAgICAvLyBG
SVhNRTogV2UgY291bGQgcHJvYmFibHkgZ2V0IHNvbWUgc3BhY2Ugc2F2aW5ncyBieSBoYXZpbmcg
dHJhbnNpdGlvbnMgc2hhcmUgYSB0YWJsZSB3aXRoIHRoZWlyCisgICAgICAgIC8vIHByZWRlY2Vz
c29ycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmaXJzdCBwcm9wZXJ0eSBuYW1lIHlvdSB1c2Ugd2hl
biBjcmVhdGluZyBhbiBvYmplY3QgZGV0ZXJtaW5lcworICAgICAgICAvLyB0aGUgInNwYWNlIiBv
ZiBpbmZlcnJlZCB0eXBlcyB0aGF0IHRoZSBzdHJ1Y3R1cmUgbGl2ZXMgaW4sIGFuZCB0aGVyZWFm
dGVyLCBldmVyeXRoaW5nIGlzIHNoYXJlZC4KKyAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgdGhp
cyBjdXJyZW50bHkgd29uJ3Qgd29yaywgYmVjYXVzZSBvZiBob3cgYWRkaW5nIG5ldyBwcm9wZXJ0
aWVzIHdvcmtzLiBXZSBhc3N1bWUKKyAgICAgICAgLy8gdGhhdCB0aGUgaW5mZXJyZWQgdHlwZSB0
YWJsZSBoYWQgbmV2ZXIgc2VlbiB0aGUgcHJvcGVydHkgYmVmb3JlLiBXZSBjb3VsZCBmaXggdGhp
cyBieSBlbnN1cmluZworICAgICAgICAvLyB0aGF0IHRoZSBJbmZlcnJlZFR5cGVUYWJsZSBkb2Vz
bid0IGZvcmdldCB0aGF0IGl0IGhhZCBhbiBlbnRyeSBmb3IgdHlwZSB3aGVuZXZlciB0aGF0IHR5
cGUgZ29lcworICAgICAgICAvLyB0byBUb3AuCisgICAgICAgIHRyYW5zaXRpb24tPm1faW5mZXJy
ZWRUeXBlVGFibGUgPSBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUtPmNsb25lKHZtKTsK
KyAgICB9CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CiAKQEAgLTgzOCw2ICs4NTIsNjUgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0
V2F0Y2hpbmdJbnRlcm5hbFBybwogICAgIHNldERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKHRy
dWUpOwogfQogCit2b2lkIFN0cnVjdHVyZTo6dXBkYXRlSW5mZXJyZWRUeXBlRm9yUHJvcGVydHko
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEFTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09
IGluZm8oKSk7CisKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEgcHJvcGVy
dHkgdGFibGUuCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKKyAgICBtYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOworCisgICAgaWYg
KCFwcm9wZXJ0eVRhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBQcm9wZXJ0eU1hcEVudHJ5
KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgIGlm
ICghZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChJbmZlcnJlZFR5cGVUYWJsZSog
dGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKQorICAgICAgICBlbnRyeS0+aGFzSW5m
ZXJyZWRUeXBlID0gdGFibGUtPmdldChlbnRyeS0+b2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAg
IGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSBmYWxzZTsKK30KKwordm9pZCBTdHJ1Y3R1cmU6OmNy
ZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJl
YWQoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwor
CisgICAgLy8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0
aGluZyBlbHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQorICAg
IC8vIGdyYWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBJbmZlcnJl
ZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgIGlmICgh
dGFibGUpIHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlQmFycmllcigpOworICAgICAgICBtX2luZmVycmVkVHlw
ZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRoaXMgb25seSB3
b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBw
cm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwg
cHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBo
YXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHksIHNvIHdlIG11c3QgaGF2ZSBhIHByb3Bl
cnR5IHRhYmxlCisgICAgLy8gbm93LgorICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKTsKKworICAg
IFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFt
ZS51aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBu
ZXcgcHJvcGVydHksIHdlIG11c3Qgbm90IGhhdmUgc2V0IGhhc0luZmVycmVkVHlwZSBwcmV2aW91
c2x5LgorICAgIEFTU0VSVCghZW50cnktPmhhc0luZmVycmVkVHlwZSk7CisgICAgCisgICAgaWYg
KCF0YWJsZS0+Y3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkodm0sIGVudHJ5LT5vZmZz
ZXQsIHZhbHVlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHN1cGVyIHJhcmUgYW5kIHdlaXJkLCBi
dXQgd2UgbmVlZCB0byBoYW5kbGUgaXQuIEl0J2xsIG9jY3VyIGlmIHRoZSB2YWx1ZSBoYXMgYSB0
eXBlIHRoYXQKKyAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0eXBlIGluZmVyZW5jZSBydWxlcyBm
b3IuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBl
ID0gdHJ1ZTsKK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVydHlNYXBI
YXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg5MTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDExICs4MSwxMyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdWlu
dDhfdCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOyAvLyBUaGlzIGNhY2hl
cyB3aGV0aGVyIG9yIG5vdCBhIHByb3BlcnR5IGhhcyBhbiBpbmZlcnJlZCB0eXBlIGluIHRoZSBp
bmZlcnJlZCB0eXBlIHRhYmxlLCBhbmQgaXMgdXNlZCBmb3IgYSBmYXN0IGNoZWNrIGluIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgpLgogCiAgICAgUHJvcGVydHlNYXBFbnRyeSgpCiAgICAg
ICAgIDoga2V5KG51bGxwdHIpCiAgICAgICAgICwgb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAg
ICAgICwgYXR0cmlidXRlcygwKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAg
ICB7CiAgICAgfQogICAgIApAQCAtOTMsNiArOTUsNyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRy
eSB7CiAgICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAg
ICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFs
c2UpCiAgICAgewogICAgICAgICBBU1NFUlQodGhpcy0+YXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVz
KTsKICAgICB9CkBAIC0zMjMsNiArMzI2LDcgQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlPZmZz
ZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBn
ZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZl
cnJlZFR5cGUpOwogCiAgICAgLy8gVGhpcyBpcyBhIHNvbWV3aGF0IGludGVybmFsaXNoIG1ldGhv
ZC4gSXQgd2lsbCBjYWxsIHlvdXIgZnVuY3RvciB3aGlsZSBwb3NzaWJseSBob2xkaW5nIHRoZQog
ICAgIC8vIFN0cnVjdHVyZSdzIGxvY2suIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB3aGV0aGVyIHRo
ZSBsb2NrIGlzIGhlbGQgb3Igbm90IGluIGFueSBwYXJ0aWN1bGFyCkBAIC00NzcsNiArNDgxLDQ3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFs
UHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsKICAgICB9CiAKKyAgICBib29sIGhhc0luZmVycmVk
VHlwZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhbV9pbmZlcnJlZFR5cGVUYWJs
ZTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHR5cGUgb2YgdGhlIHByb3Bl
cnR5IGlzIHN0aWxsIHZhbGlkLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1
ZShWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0
KCk7CisgICAgICAgIGlmIChMSUtFTFkoIXRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSB0YWJsZS0+d2lsbFN0b3JlVmFsdWUodm0sIG9mZnNl
dCwgdmFsdWUpOworICAgICAgICBpZiAodGFibGUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1f
aW5mZXJyZWRUeXBlVGFibGUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGFsd2F5cywgdG8gbWF0Y2ggdGhlIHJldHVybiB2YWx1
ZSBzZW1hbnRpY3Mgb2Ygd2lsbFN0b3JlVmFsdWUoKTogaWYgaXQgcmV0dXJucyBmYWxzZSwKKyAg
ICAvLyB0aGVuIHRoZSBwcm9wZXJ0eSB0eXBlIGlzIGludmFsaWQgKHdoaWNoIGlzIGFsd2F5cyku
CisgICAgQUxXQVlTX0lOTElORSBib29sIG1ha2VUb3AoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVy
cmVkVHlwZVRhYmxlLmdldCgpOworICAgICAgICBpZiAoTElLRUxZKCF0YWJsZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRhYmxlLT5tYWtlVG9wKHZtLCBvZmZzZXQpOwor
ICAgICAgICBpZiAodGFibGUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1faW5mZXJyZWRUeXBl
VGFibGUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQg
dXBkYXRlSGFzSW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoVk0mLCBQcm9wZXJ0eU5hbWUpOworCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGNyZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBUaGVzZSBjb25kaXRpb25zIGNvdWxkIHByb2JhYmx5IGJlIHJlZmlu
ZWQuCisgICAgICAgIGlmIChpc0RpY3Rpb25hcnkoKSB8fCB0cmFuc2l0aW9uV2F0Y2hwb2ludElz
TGlrZWx5VG9CZUZpcmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY3JlYXRl
SW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHlTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsK
KyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBl
KEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVz
IG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25z
CkBAIC02MjcsNiArNjcyLDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hp
bmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIHZvaWQgY3JlYXRlSW5mZXJyZWRUeXBl
Rm9yTmV3UHJvcGVydHlTbG93KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKwogICAgIHN0
YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNv
bnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApA
QCAtNjUwLDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRo
cm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBh
bm90aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2lu
ZmVycmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJh
bnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGlu
ZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lv
biAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAg
IEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCkt
PmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJs
ZTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFi
bGUpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZz
ZXQ7Ci0KLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChw
cm9wZXJ0eU5hbWUudWlkKCkpOwotICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBp
bnZhbGlkT2Zmc2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZl
cnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBo
YXNJbmZlcnJlZFR5cGUpOwogfQogICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
JiBhdHRyaWJ1dGVzKQogeworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBn
ZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKwor
QUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZl
cnJlZFR5cGUpCit7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEw
MSw3IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAg
cmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0
ZXM7CisgICAgaGFzSW5mZXJyZWRUeXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICBy
ZXR1cm4gZW50cnktPm9mZnNldDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260323</attachid>
            <date>2015-08-31 15:24:33 -0700</date>
            <delta_ts>2015-09-01 11:49:29 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>90543</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkxNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NTQsNiArNzU2LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTA3LDYgKzE5
MTMsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3Miw2ICsyNTgwLDEwIEBACiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTElu
dE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMEYxQjk0RDRERjAwNzFE
RDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2
NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUHJvcGVydHlUeXBlS2V5Lmg7IHBhdGggPSBkZmcvREZHUHJvcGVydHlUeXBlS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAv
KiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3Rh
bnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgw
MDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDMxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2MjgsOCArNDY0MCw4IEBACiAJCQkJQkMwMkU5OEIw
RTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5zdGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgz
OURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5
REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oICovLAotCQkJCUZFMUMwRkZDMUIxOTNFOTgw
MEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0Eg
LyogRXhjZXB0aW9uLmNwcCAqLywKKwkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhj
ZXB0aW9uLmggKi8sCiAJCQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1
enouY3BwICovLAogCQkJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmggKi8sCiAJCQkJMTQyOUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMu
Y3BwICovLApAQCAtNDY2Miw2ICs0Njc0LDEwIEBACiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2
N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYx
NjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmNwcCAqLywKKwkJCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyog
SW5mZXJyZWRUeXBlLmggKi8sCisJCQkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmNwcCAqLywKKwkJCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuaCAqLywKIAkJCQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5m
ZXJyZWRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAgKi8sCkBAIC00NzEyLDEwICs0NzI4LDEwIEBACiAJCQkJMEYyQjY2QkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAogCQkJCUE3
QkRBRUM0MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuY3BwICovLAogCQkJCUE3
QkRBRUM1MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCAqLywKLQkJCQk4NkZB
OUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKLQkJCQk4NkZB
OUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJOEIwRjQy
NEIxQUJENkRFMjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5jcHAgKi8sCiAJCQkJOEIwRjQy
NEExQUJENkQyRjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5oICovLAorCQkJCTg2RkE5RThG
MTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAorCQkJCTg2RkE5RTkw
MTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5
QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1N0NGNDU3MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAv
KiBKU0NlbGwuY3BwICovLApAQCAtNTAxMyw5ICs1MDI5LDkgQEAKIAkJCQkwRkUwNTAyNDFBQTkw
OTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggKi8sCiAJCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkw
QjM0IC8qIFZNLmNwcCAqLywKIAkJCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAq
LywKLQkJCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8sCiAJCQkJ
RkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8sCiAJCQkJRkU1
OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovLAorCQkJCUZFOTBCQjNB
MUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRUQ5NEYyQjE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovLAogCQkJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFr
R0NNYXAuaCAqLywKQEAgLTUxNjcsNiArNTE4Myw3IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2RjAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAw
N0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAorCQkJCTBGRkM5MjEzMUI5NEU4
M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCiAJCQkJQzJDMEY3Q0Ix
N0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8sCiAJCQkJQzJD
MEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovLAogCQkJ
CTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICov
LApAQCAtNTMxMiw2ICs1MzI5LDcgQEAKIAkJCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5oICovLAogCQkJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYyQjlDRTExOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZGQzkyMTUxQjk0
RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovLAogCQkJCTBGQjE3NjVFMTk2
QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVGMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQkwRjNBMUJGNzFBOUVDQjdEMDAw
REUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwICovLApAQCAtNTg5NSw2ICs1OTEz
LDcgQEAKIAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1w
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQyQ0IyNTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1
dHMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUZFMUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBF
eGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAv
KiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVFMEMwMDFC
NEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTI2NzhGOTExQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjAwOCw2ICs2MDI3LDcgQEAKIAkJCQkwRkJEN0U2
OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Iw
MjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4
ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4
NkMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApA
QCAtNjI5Miw2ICs2MzEyLDcgQEAKIAkJCQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0Mx
QiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5
MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRh
cmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDU3LDYgKzY0NzgsNyBAQAogCQkJCUJDMThDNDFG
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIw
MjhCQTE3OTc2MDNEMDA5ODAyOEMgLyogSlNGdW5jdGlvbklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03Mzk3LDYgKzc0MTksNyBAQAogCQkJCTE0MjgwODJFMTA3RUMwNTcwMDEzRTdCMiAv
KiBDb25zdHJ1Y3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0YxMTg5MUI1QjQw
MDMxQzdGQSAvKiBDb250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVB
QjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzgxMSw2ICs3ODM0
LDcgQEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50
ZXJuYWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5
NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRC
QTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODkx
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRv
dWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90
ZSB0aGF0IGZvciBhbnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBp
dCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8g
aWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLwor
ICAgIC8vIENvbmN1cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisg
ICAgLy8gaWYgKHcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0
aW9uczsKKyAgICAvLyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNv
bXBpbGF0aW9uOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlz
IHdpZGVzcHJlYWQsIGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUo
KSB3aWxsIGxlYXZlCisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkg
c3RhdGUuIEhlbmNlLCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJl
dHdlZW4KKyAgICAvLyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNv
bmQgb25lLCB0aGVuIGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAg
Ly8gY29tcGlsYXRpb24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ug
c29tZSBwaWVjZSBvZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQg
aW52YWxpZGF0ZSB0aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAg
Ly8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAv
LworICAgIC8vIHRoZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRh
dGVkIHN0YXRlIGJldHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBh
cmUgdHdvIHdheXMgdG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBm
aXJlQWxsKCkgd2l0aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcg
d2lsbCBrbm93IHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRh
dGVkIHdoZW4gaXQgZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBu
b3QgZXhwb3NlIHRoZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2
ZSB5b3VyIG93biB3YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1w
dGlvbnMgdGhhdCB0aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBE
RkcgY29kZSBpcyBpbnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAg
ICAgewogICAgICAgICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyMyw3ICsxODIzLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3Ry
dWN0dXJlLmlzQ2xvYmJlcmVkKCkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmlu
aXRlKCkKICAgICAgICAgICAgICYmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpKSB7CiAgICAgICAgICAgICBHZXRCeUlk
U3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldKTsKQEAgLTE4MzUsMjIgKzE4MzUsMTIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4g
SWYgaXQgZGlkLCB3ZSdkCiAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRv
IGRvIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
c3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3Rh
dHVzW2ldLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3Vs
dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVz
dWx0OwotICAgICAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkp
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJp
YW50cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMjA3OCwxMyArMjA2OCwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEmIGRhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlSGVhcFRvcCgpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGUgcGFydCBvZiB0aGlzIHRo
YXQgaGFuZGxlcyBpbmZlcnJlZCBwcm9wZXJ0eSB0eXBlcyByZWxpZXMgb24gQUkga25vd2luZyB0
aGUgc3RydWN0dXJlCisgICAgICAgIC8vIHJpZ2h0IG5vdy4gVGhhdCdzIHByb2JhYmx5IG5vdCBv
cHRpbWFsLiBJbiBzb21lIGNhc2VzLCB3ZSBtYXkgcGVyZm9ybSBhbiBvcHRpbWl6YXRpb24gKHVz
dWFsbHkKKyAgICAgICAgLy8gYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gQUksIG1heWJlIGJ5IENT
RSBmb3IgZXhhbXBsZSkgdGhhdCBvYnNjdXJlcyBBSSdzIHZpZXcgb2YgdGhlIHN0cnVjdHVyZQor
ICAgICAgICAvLyBhdCB0aGUgcG9pbnQgd2hlcmUgR2V0QnlPZmZzZXQgcnVucy4gQ3VycmVudGx5
LCB3aGVuIHRoYXQgaGFwcGVucywgd2UnbGwgZm9yZ2V0IHdoYXQgdGhlIHByb3ZlbgorICAgICAg
ICAvLyB0eXBlIHNob3VsZCBoYXZlIGJlZW4sIGV2ZW4gdGhvdWdoIHdlIHdvdWxkIGhhdmUga25v
d24gaXQgYXQgcGFyc2UgdGltZS4gSXQgbWlnaHQgYmUgd29ydGh3aGlsZQorICAgICAgICAvLyB0
byBwdXQgYW4gaW5mZXJyZWQgdHlwZSBpbnRvIHRoZSBTdG9yYWdlQWNjZXNzRGF0YS4gTm90ZSB0
aGF0IHRoaXMgbWlnaHQgYmVjb21lIHBhcnRpY3VsYXJseQorICAgICAgICAvLyB1bmZvcnR1bmF0
ZSBkdWUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODY0OS4K
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIGRhdGEub2Zmc2V0
LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKworICAgICAgICBmb3JOb2RlKG5v
ZGUpID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTIxMjMsMTggKzIxMjAsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRCeU9m
ZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBU
b3AoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChn
ZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1l
dGhvZDo6Q29uc3RhbnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1
bHQ7CisgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50
KCksCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5j
b25zdGFudCgpLAotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOwotICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAg
ICBjYXNlIEdldEJ5T2ZmZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
bWVyZ2UoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCBnZXRDYXNlLm1ldGhvZCgpLm9mZnNl
dCgpLCBtX2dyYXBoLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAg
ICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0gfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIGJhc2VTZXQpID09IENvbnRy
YWRpY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTkg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNo
IChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Cisg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090aGVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAg
ICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OkRvdWJsZToKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVEb3VibGUpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0
VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgbWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNP
YmplY3QpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9y
T3RoZXI6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBo
JiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3Jp
cHRvcik7CisgICAgaWYgKGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZp
eFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRh
dGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3Vs
dERvdWJsZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgorI2luY2x1ZGUgIklu
ZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRU
eXBlLmgiCiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKQEAgLTIxNCw3ICsyMTUsMTAgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzZXQoR3JhcGgm
LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKyAgICB2b2lkIHNldChHcmFwaCYs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7
CisKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGVGbGFncyBy
ZXByZXNlbnRhdGlvbiwgTm9kZSogPSBudWxscHRyKTsKICAgICB2b2lkIGZpeFR5cGVGb3JSZXBy
ZXNlbnRhdGlvbihHcmFwaCYsIE5vZGUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNk
ZWZpbmUgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERG
RydzIGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3
ZSB3YW50IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0
IHRoaXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFz
cyBEZXNpcmVkSW5mZXJyZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBl
KCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
RGVzaXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisg
ICAgICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgRGVzaXJl
ZEluZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2V4cGVjdGVkKFRvcCkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0
ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0
CisgICAgeworICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmpl
Y3QKKyAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0gVG9wOworICAgIH0KKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxJ
bmZlcnJlZFR5cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVkLmhhc2goKSAqIDc7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dCht
X2V4cGVjdGVkLCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlcihtX29iamVjdCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJ
bmZlcnJlZFR5cGUqIG1fb2JqZWN0OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX2V4
cGVjdGVkOworfTsKKworc3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIHsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBhLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geworICAg
IHR5cGVkZWYgSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIEhhc2g7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7IH07CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg5MTYxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQCB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludEFkYXB0b3I6CiAgICAgfQogfQogCit2b2lkIEluZmVycmVkVHlwZUFkYXB0b3I6OmFkZChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBDb21t
b25EYXRhJiBjb21tb24pCit7CisgICAga2V5LmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jaykpOworfQorCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygp
IHsgfQogRGVzaXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiAKQEAg
LTkzLDYgKzk4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QK
ICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKIH0KIAordm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBr
ZXkpCit7CisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMDgsNiArMTE4LDcgQEAgdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5mZXJyZWRWYWx1
ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2FkYXB0aXZlU3RydWN0dXJl
U2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2luZmVycmVkVHlw
ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdh
dGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTExNiw3ICsxMjcsOCBAQCBib29s
IERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5l
U2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGls
bFZhbGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAg
ICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAm
JiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9p
bmZlcnJlZFR5cGVzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQp
IGNvbnN0CkBAIC0xMjcsNiArMTM5LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250
ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAg
ICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxu
Iik7CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGlu
Q29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91
dC5wcmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFR5cGVz
LCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRl
ICJERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgog
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uaCIKQEAgLTkxLDYgKzkyLDE4IEBAIHN0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRBZGFwdG8KICAgICB9CiB9OwogCitzdHJ1Y3QgSW5mZXJyZWRUeXBlQWRhcHRvciB7
CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5
cGUmLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNv
bnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5
LmlzU3RpbGxWYWxpZCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgRHVtcENvbnRl
eHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGtleSwgY29u
dGV4dCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBl
LCB0eXBlbmFtZSBBZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+
PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RApAQCAtMTU5LDYgKzE3MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0
aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRp
b24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFz
IHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Ug
ZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVycmVkVHlwZUZvcigpLCB3
aGljaCBkb2VzCisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgorICAgIHZvaWQgYWRkTGF6
aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAgICBib29sIGNvbnNpZGVy
KFN0cnVjdHVyZSopOwogICAgIApAQCAtMTg2LDYgKzIwMywxMCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CiAg
ICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNXYXRjaGVkKGtleSk7Cisg
ICAgfQogCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTE5Niw2ICsy
MTcsNyBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRW
YWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdlbmVy
aWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdX
YXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzPERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlwZUFkYXB0b3I+IG1faW5m
ZXJyZWRUeXBlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg3
LDYgKzg4Nyw1MCBAQCBib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsCiAg
ICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZz
ZXQpKTsKIH0KIAorSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5cGVG
b3IoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCit7CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVk
KGtleS5zdHJ1Y3R1cmUoKSk7CisgICAgCisgICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5cGVz
LmdldChrZXkpOworICAgIGlmIChpdGVyICE9IG1faW5mZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOworCisgICAgSW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0g
a2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3JPZmZzZXQoa2V5Lm9mZnNldCgpKTsKKyAg
ICBpZiAoIXR5cGVPYmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIElu
ZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAg
IH0KKworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVzY3JpcHRvciA9IHR5cGVP
YmplY3QtPmRlc2NyaXB0b3IoKTsKKyAgICBpZiAoIXR5cGVEZXNjcmlwdG9yLmlzU3RpbGxWYWxp
ZCgpKSB7CisgICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRv
cCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAg
bV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIHR5cGVEZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53
ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodHlwZU9iamVjdCk7CisgICAgaWYgKHR5cGVEZXNjcmlw
dG9yLnN0cnVjdHVyZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlRGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSk7CisKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0
Y2hpbmcgdGhpcyBkZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0
dXJlcyBtYXkKKyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2Uu
CisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5
cGVPYmplY3QsIHR5cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7
Cit9CisKK2Jvb2wgR3JhcGg6OndhdGNoRGVzaXJlZFR5cGUoY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYga2V5KQoreworICAgIGlmICgha2V5LmlzU3RpbGxWYWxpZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmpl
Y3QoKSk7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ga2V5LmV4cGVjdGVkKCkuc3Ry
dWN0dXJlKCkpCisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV9w
bGFuLndhdGNocG9pbnRzLmFkZExhemlseShrZXkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTA2
MSw3ICsxMTA1LDcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwog
SlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2Us
IGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9i
YmVyZWQoKSkgeworICAgIGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3Vs
ZCBkbyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0byBjb25z
dGFudC1mb2xkIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTIwLDM0IEBAIEpTVmFsdWUg
R3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eShiYXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9CiAK
K0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlQ2xv
YmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAg
ICBiYXNlLmZvckVhY2goCisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXQoKnRo
aXMsIGluZmVycmVkVHlwZUZvcihzdHJ1Y3R1cmUsIG9mZnNldCkpOworICAgICAgICAgICAgcmVz
dWx0Lm1lcmdlKHZhbHVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
QWJzdHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0
IEFic3RyYWN0VmFsdWUmIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlQ2xv
YmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdl
dENvbnN0YW50UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVl
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2Ji
ZXJTdGF0ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2Uu
bV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQ
cm9wZXJ0eShiYXNlLm1fc3RydWN0dXJlLnNldCgpLCBvZmZzZXQsIGNsb2JiZXJTdGF0ZSk7CisK
KyAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBo
Ojp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZz
ZXQpCiB7CiAgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2Vl
IGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3
NSwyMSBAQCBwdWJsaWM6CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5n
IGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMg
aXMKICAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNr
IHdpdGggd2F0Y2hDb25kaXRpb24oKS4KICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCog
YmFzZSwgUHJvcGVydHlPZmZzZXQpOworCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0
eXBlIHdlIGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4g
dGhlIGZ1dHVyZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9y
KGNvbnN0IFByb3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBp
bmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVy
dHlUeXBlS2V5KHN0cnVjdHVyZSwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1
ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
YmFzZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CisKKyAgICAvLyBU
aGlzIHVzZXMgZWl0aGVyIGNvbnN0YW50IHByb3BlcnR5IGluZmVyZW5jZSBvciBwcm9wZXJ0eSB0
eXBlIGluZmVyZW5jZSB0byBkZXJpdmUgYSBnb29kIGFic3RyYWN0CisgICAgLy8gdmFsdWUgZm9y
IHNvbWUgcHJvcGVydHkgYWNjZXNzZWQgd2l0aCB0aGUgZ2l2ZW4gYWJzdHJhY3QgdmFsdWUgYmFz
ZS4KKyAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAg
Y29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSk7CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENv
ZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVD
YWxsRnJhbWUqKTsKQEAgLTg1Niw2ICs4NzEsNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2Rl
TGl2ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVj
dCosIFByb3BlcnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOworICAgIEhhc2hNYXA8UHJvcGVydHlU
eXBlS2V5LCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKICAgICBE
b21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51
bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNkZWZpbmUg
REZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBU
aGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3BlcnR5J3MgdHlwZS4gSXQncyBh
IHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFByb3BlcnR5T2Zmc2V0LgorCitjbGFzcyBQcm9wZXJ0
eVR5cGVLZXkgeworcHVibGljOgorICAgIFByb3BlcnR5VHlwZUtleSgpCisgICAgICAgIDogbV9z
dHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAg
IHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisg
ICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5
cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0
KG51bGxwdHIpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCAtIDEpCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZSAmJiBtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0OyB9CisKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlCisgICAgICAgICAgICAm
JiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2go
bV9zdHJ1Y3R1cmUpICsgbV9vZmZzZXQ7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1f
b2Zmc2V0ID09IGludmFsaWRPZmZzZXQgLSAxOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7
CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29u
dGV4dCksICIrIiwgbV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFBy
b3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworc3RydWN0IFByb3BlcnR5VHlwZUtleUhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KSB7
IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvcGVy
dHlUeXBlS2V5JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICB0eXBl
ZGVmIEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFp
dHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlND
OjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFs
dWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsx
OTIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLSAgICAKKwogICAgIC8vIEluIG1vc3Qg
Y2FzZXMsIHdoYXQgeW91IHJlYWxseSB3YW50IHRvIGRvIGlzIHZlcmlmeSB3aGV0aGVyIHRoZSBz
ZXQgaXMgdG9wIG9yIGNsb2JiZXJlZCwgYW5kCiAgICAgLy8gaWYgbm90LCBlbnVtZXJhdGUgdGhl
IHNldCBvZiBzdHJ1Y3R1cmVzLiBVc2UgdGhpcyBvbmx5IGluIGNhc2VzIHdoZXJlIHRoZSBzaW5n
bGV0b24gY2FzZSBpcwogICAgIC8vIG1lYW5pbmdmdWxseSBzcGVjaWFsLCBsaWtlIGZvciB0cmFu
c2l0aW9ucy4KQEAgLTIwMiw2ICsyMDIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBtX3NldC5vbmx5U3RydWN0dXJlKCk7CiAgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7
CisgICAgICAgIG1fc2V0LmZvckVhY2goZnVuY3Rvcik7CisgICAgfQogICAgIAogICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDc1IEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWIK
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorQXNzZW1ibHlIZWxwZXJz
OjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgKKyAgICBKU1ZhbHVl
UmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgcmVzdWx0Owor
CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpCb3R0b206CisgICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdEJvb2xlYW4ocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFu
Y2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RJ
bnQzMihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkRv
dWJsZToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZkludDMyKHJlZ3MpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdzKSk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdE51bWJlcihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3Mu
cGF5bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUocmVncy5w
YXlsb2FkR1BSKCksIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAg
ICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hTdHJ1Y3R1cmUocmVncy5wYXlsb2FkR1BSKCksIGRlc2NyaXB0b3Iuc3RydWN0dXJl
KCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFu
Y2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3Ro
ZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChyZWdzLnBh
eWxvYWRHUFIoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cHVyaWZ5
TmFOKEZQUlJlZyBmcHIpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gYnJh
bmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcHIsIGZwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2Myw2ICs1NjMsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIoRXF1YWws
IHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAj
ZW5kaWYKICAgICB9CisKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5cGUoSlNWYWx1ZVJlZ3Mg
cmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1cm4gYnJhbmNo
MzIoY29uZGl0aW9uLCBsZWZ0SGFuZFNpZGUsIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmUtPmlkKCkp
KTsKKyNlbHNlCisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZGl0aW9uLCBsZWZ0SGFuZFNp
ZGUsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAg
c3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvckJ5dGVPZmZzZXQocHRyZGlmZl90IGJ5dGVPZmZzZXQp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODkxNjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDQs
OCArNDA0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1v
ZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24sIFQgbGVm
dEhhbmRTaWRlLCBTdHJ1Y3R1cmUqKTsKLQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAg
IGJvb2wgZ2V0T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KGludCBvcDEsIGludCBvcDIsIGlu
dCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU5LDI2ICsxMjU5LDYgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0FzQm9vbEltbQogCiAjZW5kaWYgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1KSVQ6Okp1bXAgSklUOjpi
cmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRT
aWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJl
dHVybiBicmFuY2gzMihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1c3RlZEltbTMyKHN0cnVj
dHVyZS0+aWQoKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmRpdGlvbiwgbGVm
dEhhbmRTaWRlLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotI2VuZGlmCi19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYnJhbmNoU3RydWN0dXJlKE1h
Y3JvQXNzZW1ibGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGppdC5icmFuY2gzMihjb25kaXRpb24sIGxlZnRIYW5k
U2lkZSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdHJ1Y3R1cmUtPmlkKCkpKTsKLSNl
bHNlCi0gICAgcmV0dXJuIGppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBsZWZ0SGFuZFNpZGUsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotI2VuZGlmCi19Ci0KIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVk
VHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlIiwg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGUpIH07CisKK0luZmVycmVkVHlw
ZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZSogcmVz
dWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlPih2bS5oZWFwKSkg
SW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBzdGF0aWNfY2FzdDxJbmZl
cnJlZFR5cGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGUtPkluZmVycmVkVHlwZTo6fkluZmVy
cmVkVHlwZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IGpzQ2FzdDxJ
bmZlcnJlZFR5cGUqPihjZWxsKTsKKworICAgIGlmIChpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJl
KQorICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoaW5mZXJyZWRUeXBl
LT5tX3N0cnVjdHVyZS5nZXQoKSk7Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIE90aGVyOworICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUuaXNE
b3VibGUoKSkKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChj
ZWxsLT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgaWYg
KGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjptZXJnZShjb25zdCBE
ZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAg
ICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuOgor
ICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgSW50MzI6CisgICAgICAgIHN3aXRj
aCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICBjYXNlIE51
bWJlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE51bWJlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgTnVtYmVyOgor
ICAgICAgICAgICAgbV9raW5kID0gTnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVj
dHVyZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICp0aGlz
ID0gT2JqZWN0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9y
T3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoK
KyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVy
Lm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAg
KnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNl
IE9iamVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Cisg
ICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RPck90aGVyOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMg
PSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdE9y
T3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjoKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgVG9wOgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICp0
aGlzID0gT2JqZWN0OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICByZXR1
cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBj
b25zdAoreworICAgIERlc2NyaXB0b3IgbWVyZ2VkID0gKnRoaXM7CisgICAgbWVyZ2VkLm1lcmdl
KG90aGVyKTsKKyAgICByZXR1cm4gKnRoaXMgPT0gbWVyZ2VkOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvcjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBpZiAo
bV9zdHJ1Y3R1cmUpCisgICAgICAgIG91dC5wcmludCgiOiIsIGluQ29udGV4dCgqbV9zdHJ1Y3R1
cmUsIGNvbnRleHQpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0
cik7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRUeXBlKFZNJiB2bSkKKyAgICA6IEJhc2Uo
dm0sIHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fd2F0Y2hwb2ludFNl
dChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSgp
Cit7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBp
ZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0gZXhwZWN0ZWQ7Cit9CisKK2Jvb2wgSW5m
ZXJyZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7Cisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gaXNTdGls
bFZhbGlkKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0
Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQo
KSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0LmFkZCh3YXRjaHBvaW50KTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGFkZFdhdGNo
cG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlz
KSwgIjoiLCBkZXNjcmlwdG9yKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIERlc2NyaXB0b3IgbXlUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIp
OworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBlID0gRGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFsdWUp
OworCisgICAgbXlUeXBlLm1lcmdlKG90aGVyVHlwZSk7CisKKyAgICBBU1NFUlQoZGVzY3JpcHRv
cihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRoZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlmIHdl
J3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKK30K
Kwordm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3AoVk0mIHZtKQoreworICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgc2V0KGxvY2tlciwgdm0sIFRvcCk7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2Vy
LCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sKKyAgICAvLyBXZSB3aWxsIHRy
aWdnZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3
cml0ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKKyAgICAvLyBjb3VsZCBjaGFuZ2UuIElm
IGl0IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBo
YXZlIHVzZWQKKyAgICAvLyBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGluIHRoZSBjYWxsZXIs
IGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1heWJlIHRoYXQgd291bGRuJ3Qg
YmUKKyAgICAvLyBhIGdvb2QgaWRlYS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0u
aGVhcCk7CisgICAgCisgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBub3QgcmVhbGx5IGNo
YW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCisgICAg
aWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUaGUgbmV3IGRlc2NyaXB0b3IgbXVzdCBiZSBtb3JlIGdlbmVyYWwgdGhhbiB0
aGUgcHJldmlvdXMgb25lLgorICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN1YnN1bWVzKGRlc2Ny
aXB0b3IobG9ja2VyKSkpOworCisgICAgLy8gSWYgdGhlIG5ldyBkZXNjcmlwdG9ycyBoYXZlIGRp
ZmZlcmVudCBzdHJ1Y3R1cmVzLCB0aGVuIGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugb25lIGlzIG51
bGwuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSAhPSBuZXdEZXNjcmlw
dG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1
Y3R1cmUoKSB8fCAhbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisKKyAgICAvLyBXZSBhcmUg
Y2hhbmdpbmcgdGhlIHR5cGUsIHNvIG1ha2Ugc3VyZSB0aGF0IGlmIGFueW9uZSB3YXMgd2F0Y2hp
bmcsIHRoZXkgZmluZCBvdXQgYWJvdXQgaXQgbm93LiBJZgorICAgIC8vIGFueW9uZSBpcyB3YXRj
aGluZywgd2UgbWFrZSBzdXJlIHRvIGdvIHRvIFRvcCBzbyB0aGF0IHdlIGRvbid0IGRvIHRoaXMg
c29ydCBvZiB0aGluZyBhZ2Fpbi4KKyAgICBpZiAobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0g
Q2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgIC8vIFdlIGNhbm5vdCBoYXZlIGJlZW4gaW52YWxp
ZGF0ZWQsIHNpbmNlIGlmIHdlIHdlcmUsIHRoZW4gd2UnZCBhbHJlYWR5IGJlIGF0IFRvcC4KKyAg
ICAgICAgQVNTRVJUKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpOwor
CisgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGRvIGV4cGVuc2l2ZSB0aGluZ3MgYmVjYXVzZSBz
b21lIGNvbXBpbGVyIHRocmVhZCBkZWNpZGVkIHRvIHdhdGNoIHRoaXMgdHlwZSBhbmQKKyAgICAg
ICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFuZ2VkLiBBc3N1bWUgdGhhdCB0aGlzIHByb3BlcnR5IGlz
IGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBkbyBhbnkgbW9yZSB0aGluZ3MgZm9yCisgICAgICAgIC8v
IGl0LgorICAgICAgICBuZXdEZXNjcmlwdG9yID0gVG9wOworCisgICAgICAgIG1fd2F0Y2hwb2lu
dFNldC5maXJlQWxsKCJJbmZlcnJlZCB0eXBlIGNoYW5nZWQiKTsKKyAgICB9CisKKyAgICAvLyBS
ZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5l
ZWQgaXQuCisgICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBtX3N0
cnVjdHVyZSA9IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUg
b2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAgICAgICAg
IEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1
cmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6
bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHRoaXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0
dXJlKCkpOworICAgICAgICAgICAgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNp
dGlvbldhdGNocG9pbnQobV9zdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQuCisgICAgbV9raW5kID0gbmV3
RGVzY3JpcHRvci5raW5kKCk7CisKKyAgICAvLyBBc3NlcnQgdGhhdCB3ZSBkaWQgdGhpbmdzLgor
ICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcik7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQoreworICAgIFZNJiB2bSA9ICpIZWFw
OjpoZWFwKHRoaXMpLT52bSgpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9w
YXJlbnQtPm1fbG9jayk7CisgICAgCisgICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yID0gZGVz
Y3JpcHRvcihsb2NrZXIpOworICAgIG5ld0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7Cisg
ICAgCisgICAgc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKEluZmVycmVkVHlw
ZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IG1fcGFyZW50KHBhcmVudCkK
KyAgICAsIG1fc3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBJ
bmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURl
dGFpbCYpCit7CisgICAgbV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
K3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcChtX3BhcmVudCktPnZtKCk7CisKKyAgICBBU1NF
UlQoSGVhcDo6aXNNYXJrZWQobV9wYXJlbnQpKTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgbV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVy
ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJ
bmZlcnJlZFR5cGU6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIG91
dC5wcmludCgiQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk90aGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpEb3VibGU6CisgICAg
ICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0LnByaW50
KCJTdHJpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoK
KyAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9y
T3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Cisg
ICAgICAgIG91dC5wcmludCgiVG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5mZGVmIEluZmVycmVkVHlwZV9oCisjZGVmaW5l
IEluZmVycmVkVHlwZV9oCisKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1
ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3Qg
dXNlZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMu
CisKK2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVh
dGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIGVudW0gS2luZCA6IHVpbnQ4X3Qgewor
ICAgICAgICBCb3R0b20sCisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIE90aGVyLAorICAgICAg
ICBJbnQzMiwKKyAgICAgICAgRG91YmxlLAorICAgICAgICBOdW1iZXIsCisgICAgICAgIFN0cmlu
ZywKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZSwKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIsCisgICAgICAgIE9iamVjdCwKKyAgICAgICAgT2JqZWN0T3JPdGhlciwKKyAg
ICAgICAgVG9wCisgICAgfTsKKworICAgIGNsYXNzIERlc2NyaXB0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgRGVzY3JpcHRvcigpCisgICAgICAgICAgICA6IG1fa2luZChCb3R0b20pCisgICAg
ICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIERlc2NyaXB0b3IoS2luZCBraW5kLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxw
dHIpCisgICAgICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVy
ZShzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBEZXNj
cmlwdG9yIGZvclZhbHVlKEpTVmFsdWUpOworCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IEJvdHRv
bSAmJiAhbV9zdHJ1Y3R1cmU7CisgICAgICAgIH0KKworICAgICAgICBLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
bmNsdWRlc1ZhbHVlKEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgICAgICAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOworICAgICAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICAgICAgICAg
IGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKyAg
ICAgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Rv
dWJsZSgpOworICAgICAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzTnVtYmVyKCk7CisgICAgICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlOworICAgICAgICAgICAgY2Fz
ZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKQorICAgICAgICAgICAgICAgICAgICB8fCAodmFsdWUuaXND
ZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc09i
amVjdCgpOworICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IHZhbHVlLmlzT2JqZWN0KCk7Cisg
ICAgICAgICAgICBjYXNlIFRvcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNjcmlwdG9yJiBvdGhl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQK
KyAgICAgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNjcmlwdG9yJiBvdGhl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUp
IF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgdm9pZCBtZXJnZShjb25zdCBEZXNjcmlwdG9yJik7CisgICAgICAgIHZvaWQgcmVtb3ZlU3Ry
dWN0dXJlKCk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBp
cyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb3RoZXIgb25lLgorICAgICAgICBib29sIHN1YnN1bWVz
KGNvbnN0IERlc2NyaXB0b3ImKSBjb25zdDsKKworICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5kOwor
ICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBDb25jdXJyZW50
SklUTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3JpcHRv
ciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJl
LT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgIH0KKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0
b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICB9CisgICAgCisg
ICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyBy
ZXR1cm4gZGVzY3JpcHRvcigpLmtpbmQoKTsgfQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRv
cigpLnN0cnVjdHVyZSgpOyB9CisKKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50
IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYg
dm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgICAgICBpZiAoIWRlc2NyaXB0b3IobG9ja2VyKS5pbmNsdWRlc1Zh
bHVlKGxvY2tlciwgdmFsdWUpKQorICAgICAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KGxvY2tl
ciwgdm0sIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGtpbmQobG9ja2VyKSAhPSBUb3A7CisgICAg
fQorCisgICAgLy8gSW1tZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGlycmVsZXZhbnQuCisgICAg
dm9pZCBtYWtlVG9wKFZNJik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5
IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0
b3IuIE5vdGUgdGhhdAorICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBU
b3AuCisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIs
IGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3Im
KTsKKyAgICAKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYgbG9ja2VyLCBXYXRjaHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9p
bnQqKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIEluZmVycmVkVHlwZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAgIHZvaWQg
d2lsbFN0b3JlVmFsdWVTbG93KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIEpTVmFs
dWUpOworICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIERlc2Ny
aXB0b3IpOworICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxlIENvbmN1
cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9Owor
CisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgOiBwdWJsaWMgV2F0Y2hwb2ludCwgcHVibGlj
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRT
dHJ1Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOworCisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH07
CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVE
ZXRhaWwmKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgp
IG92ZXJyaWRlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVu
dDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgfTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisK
KyAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBU
b3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQorICAgIC8vIHByb2Zp
dGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNs
ZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8gdGhyZWFkLiBUaGUg
REZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0Y2hl
cy4KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
ZmVycmVkVHlwZVRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9IHsg
IkluZmVycmVkVHlwZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5
cGVUYWJsZSkgfTsKKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVh
dGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVkVHlw
ZVRhYmxlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0aWNf
Y2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZVRhYmxlLT5J
bmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisKK1N0cnVjdHVyZSog
SW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJyZWRU
eXBlVGFibGUqPihjZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgCisgICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0PiB0b1JlbW92ZTsKKyAgICAKKyAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV90YWJsZSkgeworICAgICAgICBpZiAoZW50cnkudmFsdWUt
PmlzUmVsZXZhbnQoKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyeS52YWx1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkpOwor
ICAgIH0KKworICAgIGZvciAoUHJvcGVydHlPZmZzZXQgb2Zmc2V0IDogdG9SZW1vdmUpCisgICAg
ICAgIG1fdGFibGUucmVtb3ZlKG9mZnNldCk7Cit9CisKK0luZmVycmVkVHlwZVRhYmxlKiBJbmZl
cnJlZFR5cGVUYWJsZTo6Y2xvbmUoVk0mIHZtKQoreworICAgIFZlY3RvcjxUYWJsZVR5cGU6Oktl
eVZhbHVlUGFpclR5cGUsIDg+IHRvQWRkOworICAgIAorICAgIHsKKyAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
dGFibGUpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXNSZWxldmFudCgpKQorICAg
ICAgICAgICAgICAgIHRvQWRkLmFwcGVuZChlbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBJbmZlcnJlZFR5cGVUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKKworICAgIGZvciAoYXV0
byYgZW50cnkgOiB0b0FkZCkKKyAgICAgICAgcmVzdWx0LT5tX3RhYmxlLmFkZChlbnRyeS5rZXks
IFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KHZtLCByZXN1bHQsIGVudHJ5LmdldCgpKSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxl
OjpnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBtX3RhYmxlLmdldChvZmZzZXQp
OworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFRh
a2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBlcy4KKyAgICBpZiAo
IXJlc3VsdC0+aXNSZWxldmFudCgpKSB7CisgICAgICAgIG1fdGFibGUucmVtb3ZlKG9mZnNldCk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBy
ZXR1cm4gZ2V0KGxvY2tlciwgb2Zmc2V0KTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGVUYWJsZTo6
d2lsbFN0b3JlVmFsdWUoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBJbmZl
cnJlZFR5cGUqIHR5cGUgPSBtX3RhYmxlLmdldChvZmZzZXQpOworICAgIGlmICghdHlwZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHR5cGUtPndpbGxTdG9yZVZhbHVlKHZtLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV90YWJsZS5yZW1vdmUob2Zmc2V0
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VU
b3AoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpJVGxv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGUgPSBtX3RhYmxlLnRh
a2Uob2Zmc2V0KTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIHR5cGUt
Pm1ha2VUb3AoKTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlSW5mZXJyZWRU
eXBlRm9yTmV3UHJvcGVydHkoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgSW5mZXJyZWRUeXBlKiB0eXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUo
dm0pOworICAgIGlmICghdHlwZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gRmlyZSB0aGUgYmFycmllciBiZWZvcmUgZ3JhYmJpbmcg
dGhlIGxvY2suCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4gdHlwZUJhcnJpZXIodm0s
IHRoaXMsIHR5cGUpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgYXV0byByZXN1bHQgPSBtX3RhYmxlLmFkZChvZmZzZXQsIHR5cGVCYXJyaWVyKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBJbmZlcnJlZFR5cGVUYWJsZV9oCisjZGVmaW5lIEluZmVycmVk
VHlwZVRhYmxlX2gKKworI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2Vs
bC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBm
b3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZp
ZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVzdHJ1Y3RvciBhbmQgbWFrZXMgbGlmZXR5cGUgZWFzaWVy
IHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQg
dGhpcyB0aGluZworLy8gY2Fubm90IGJlIGRlbGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5n
LiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVydHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVy
dGllcworLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZlcnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVy
dGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisv
LyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21lIFN0cnVjdHVyZSIpLgorCitjbGFzcyBJbmZl
cnJlZFR5cGVUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlVGFibGUqIGNyZWF0ZShW
TSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGNsb25lKFZN
Jik7CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS5pc0VtcHR5KCk7IH0K
KworICAgIEluZmVycmVkVHlwZSogZ2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCk7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoUHJvcGVydHlPZmZzZXQpOworCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkg
aXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8vIHJlbGV2
YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1
bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5T2Zm
c2V0LCBKU1ZhbHVlKTsKKworICAgIC8vIEludmFsaWRhdGVzIHRoZSB0eXBlIGZvciB0aGUgcHJv
cGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9yZSBpbiBhIHJlZmxlY3RpdmUgY29udGV4
dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBUaGlz
IGNyZWF0ZXMgYSBuZXcgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5LiBOb3RlIHRoYXQg
dGhpcyBtZXRob2QgaXMgbmVlZGVkIGJlY2F1c2UKKyAgICAvLyB3aWxsU3RvcmVWYWx1ZSgpIGFz
c3VtZXMgdGhhdCBpZiB0aGVyZSBpc24ndCBhbiBJbmZlcnJlZFR5cGUgb2JqZWN0IGZvciB0aGUg
cHJvcGVydHksIHRoZW4gaXQncworICAgIC8vIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBjb25jbHVk
ZWQgdGhhdCB0aGUgcHJvcGVydHkgc2hvdWxkIG5vdCBoYXZlIGEgdHlwZS4KKyAgICBib29sIGNy
ZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KFZNJiwgUHJvcGVydHlPZmZzZXQsIEpTVmFs
dWUpOworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVy
cmVkVHlwZVRhYmxlKCk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UHJvcGVydHlPZmZzZXQsIFdy
aXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gVGFibGVU
eXBlOworICAgIAorICAgIFRhYmxlVHlwZSBtX3RhYmxlOworICAgIENvbmN1cnJlbnRKSVRMb2Nr
IG1fbG9jazsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRU
eXBlVGFibGVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxNCw2ICsxMjE0LDggQEAgaW5saW5lIGJv
b2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKSB7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOwor
ICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1
cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7
CkBAIC0xMjUzLDYgKzEyNTUsMTAgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENh
cGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIG9mZnNldCkpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGRvIHR5cGUg
aW5mZXJlbmNlLgorICAgICAgICBpZiAoc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCkKKyAgICAg
ICAgICAgIHN0cnVjdHVyZS0+Y3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkodm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwog
ICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSkgewpAQCAtMTI2OSwxMiArMTI3NSwyMiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoCiAgICAgfQogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0
dHJpYnV0ZXMpOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZlcnJl
ZFR5cGUpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICBpZiAo
KG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQ
cm9wZXJ0eShvZmZzZXQpOworICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBlKSkg
eworICAgICAgICAgICAgYm9vbCBpc1N0aWxsVmFsaWQ7CisgICAgICAgICAgICBpZiAoc2xvdC5j
b250ZXh0KCkgPT0gUHV0QnlJZCkKKyAgICAgICAgICAgICAgICBpc1N0aWxsVmFsaWQgPSBzdHJ1
Y3R1cmUtPndpbGxTdG9yZVZhbHVlKHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpc1N0aWxsVmFsaWQgPSBzdHJ1Y3R1cmUtPm1ha2VUb3Aodm0s
IG9mZnNldCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU3RpbGxWYWxpZCkpCisgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT51cGRhdGVIYXNJbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eSh2
bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgfQogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVl
KTsKIApAQCAtMTI5NCw2ICsxMzEwLDggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dEludGVybmFsKAogICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
IGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7CiAgICAgCiAgICAgc3RydWN0dXJlID0gU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7
CisgICAgaWYgKHNsb3QuY29udGV4dCgpID09IFB1dEJ5SWQpCisgICAgICAgIHN0cnVjdHVyZS0+
Y3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUp
OwogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDEx
ICszNDcsMTUgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAg
IGVsc2UKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgdGFibGUpOwogCisg
ICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVUYWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0
KCk7CisKICAgICBmb3IgKHNpemVfdCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKICAg
ICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm1fbmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVy
dHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVj
dHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CisgICAg
ICAgIGlmICh0eXBlVGFibGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX29mZnNldCkp
CisgICAgICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOwogICAgICAgICBwcm9w
ZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5
T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNDYxLDYgKzQ2NSwxNiBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+
c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlU
YWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5tX29mZnNldDsKKyAgICBpZiAoc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxl
KSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBwcm9iYWJseSBnZXQgc29tZSBzcGFjZSBz
YXZpbmdzIGJ5IGhhdmluZyB0cmFuc2l0aW9ucyBzaGFyZSBhIHRhYmxlIHdpdGggdGhlaXIKKyAg
ICAgICAgLy8gcHJlZGVjZXNzb3JzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZpcnN0IHByb3BlcnR5
IG5hbWUgeW91IHVzZSB3aGVuIGNyZWF0aW5nIGFuIG9iamVjdCBkZXRlcm1pbmVzCisgICAgICAg
IC8vIHRoZSAic3BhY2UiIG9mIGluZmVycmVkIHR5cGVzIHRoYXQgdGhlIHN0cnVjdHVyZSBsaXZl
cyBpbiwgYW5kIHRoZXJlYWZ0ZXIsIGV2ZXJ5dGhpbmcgaXMgc2hhcmVkLgorICAgICAgICAvLyBV
bmZvcnR1bmF0ZWx5LCB0aGlzIGN1cnJlbnRseSB3b24ndCB3b3JrLCBiZWNhdXNlIG9mIGhvdyBh
ZGRpbmcgbmV3IHByb3BlcnRpZXMgd29ya3MuIFdlIGFzc3VtZQorICAgICAgICAvLyB0aGF0IHRo
ZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGhhZCBuZXZlciBzZWVuIHRoZSBwcm9wZXJ0eSBiZWZvcmUu
IFdlIGNvdWxkIGZpeCB0aGlzIGJ5IGVuc3VyaW5nCisgICAgICAgIC8vIHRoYXQgdGhlIEluZmVy
cmVkVHlwZVRhYmxlIGRvZXNuJ3QgZm9yZ2V0IHRoYXQgaXQgaGFkIGFuIGVudHJ5IGZvciB0eXBl
IHdoZW5ldmVyIHRoYXQgdHlwZSBnb2VzCisgICAgICAgIC8vIHRvIFRvcC4KKyAgICAgICAgdHJh
bnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZSA9IHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVU
YWJsZS0+Y2xvbmUodm0pOworICAgIH0KIAogICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtODM4LDYgKzg1Miw2NSBAQCB2b2lk
IFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRl
cm5hbFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjp1cGRhdGVJbmZlcnJl
ZFR5cGVGb3JQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKKworICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3
ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRh
YmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlU
YWJsZSk7CisKKyAgICBpZiAoIXByb3BlcnR5VGFibGUpCisgICAgICAgIHJldHVybjsKKworICAg
IFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFt
ZS51aWQoKSk7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKElu
ZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpCisgICAg
ICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+Z2V0KGVudHJ5LT5vZmZzZXQpOwor
ICAgIGVsc2UKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOworfQorCit2
b2lkIFN0cnVjdHVyZTo6Y3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5m
bygpID09IGluZm8oKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5cGUgdGFibGUg
YmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0MgYWZ0ZXIgd2Ug
aGF2ZSBhbHJlYWR5CisgICAgLy8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUgcHJvcGVydHkg
bWFwLgorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUu
Z2V0KCk7CisgICAgaWYgKCF0YWJsZSkgeworICAgICAgICB0YWJsZSA9IEluZmVycmVkVHlwZVRh
YmxlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVCYXJyaWVyKCk7CisgICAg
ICAgIG1faW5mZXJyZWRUeXBlVGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgfQorCisg
ICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgorICAg
IFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKworICAgIC8vIFdlIG11c3QgYmUgY2Fs
bGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0eSwgc28gd2Ug
bXVzdCBoYXZlIGEgcHJvcGVydHkgdGFibGUKKyAgICAvLyBub3cuCisgICAgQVNTRVJUKHByb3Bl
cnR5VGFibGUpOworCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxl
LT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBBU1NFUlQoZW50cnkpOworCisgICAgLy8g
U2luY2UgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgd2UgbXVzdCBub3QgaGF2ZSBzZXQgaGFzSW5m
ZXJyZWRUeXBlIHByZXZpb3VzbHkuCisgICAgQVNTRVJUKCFlbnRyeS0+aGFzSW5mZXJyZWRUeXBl
KTsKKyAgICAKKyAgICBpZiAoIXRhYmxlLT5jcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0
eSh2bSwgZW50cnktPm9mZnNldCwgdmFsdWUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIg
cmFyZSBhbmQgd2VpcmQsIGJ1dCB3ZSBuZWVkIHRvIGhhbmRsZSBpdC4gSXQnbGwgb2NjdXIgaWYg
dGhlIHZhbHVlIGhhcyBhIHR5cGUgdGhhdAorICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHR5cGUg
aW5mZXJlbmNlIHJ1bGVzIGZvci4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVudHJ5
LT5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOworfQorCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFU
UwogCiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRz
ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1h
cEVudHJ5IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5
cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVy
cmVkIHR5cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZh
c3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0
eU1hcEVudHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52
YWxpZE9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJy
ZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05Myw2ICs5NSw3IEBAIHN0cnVj
dCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNl
dChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhh
c0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1
dGVzID09IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTMyMyw2ICszMjYsNyBAQCBwdWJsaWM6CiAK
ICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5
T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAg
IFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQg
aW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3Np
Ymx5IGhvbGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3Vh
cmFudGVlIHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIK
QEAgLTQ3Nyw2ICs0ODEsNTQgQEAgcHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFy
dFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAg
IGJvb2wgaGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFt
X2luZmVycmVkVHlwZVRhYmxlOworICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRU
eXBlRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmIChJ
bmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRhYmxlLT5nZXQob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0eXBlIG9mIHRoZSBwcm9w
ZXJ0eSBpcyBzdGlsbCB2YWxpZC4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgd2lsbFN0b3JlVmFs
dWUoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdl
dCgpOworICAgICAgICBpZiAoTElLRUxZKCF0YWJsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZtLCBvZmZz
ZXQsIHZhbHVlKTsKKyAgICAgICAgaWYgKHRhYmxlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBt
X2luZmVycmVkVHlwZVRhYmxlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgLy8gUmV0dXJucyBmYWxzZSBhbHdheXMsIHRvIG1hdGNoIHRoZSByZXR1cm4gdmFs
dWUgc2VtYW50aWNzIG9mIHdpbGxTdG9yZVZhbHVlKCk6IGlmIGl0IHJldHVybnMgZmFsc2UsCisg
ICAgLy8gdGhlbiB0aGUgcHJvcGVydHkgdHlwZSBpcyBpbnZhbGlkICh3aGljaCBpcyBhbHdheXMp
LgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBtYWtlVG9wKFZNJiB2bSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZl
cnJlZFR5cGVUYWJsZS5nZXQoKTsKKyAgICAgICAgaWYgKExJS0VMWSghdGFibGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0YWJsZS0+bWFrZVRvcCh2bSwgb2Zmc2V0KTsK
KyAgICAgICAgaWYgKHRhYmxlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2luZmVycmVkVHlw
ZVRhYmxlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lk
IHVwZGF0ZUhhc0luZmVycmVkVHlwZUZvclByb3BlcnR5KFZNJiwgUHJvcGVydHlOYW1lKTsKKwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eShW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICAvLyBGSVhNRTogVGhlc2UgY29uZGl0aW9ucyBjb3VsZCBwcm9iYWJseSBiZSByZWZp
bmVkLgorICAgICAgICBpZiAoaXNEaWN0aW9uYXJ5KCkgfHwgdHJhbnNpdGlvbldhdGNocG9pbnRJ
c0xpa2VseVRvQmVGaXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNyZWF0
ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5U2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7
CisgICAgfQorCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFw
ZShKU1ZhbHVlKTsKICAgICAKICAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc3RydWN0dXJl
cyBtYXRjaCBlbm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBhbGxvY2F0aW9u
cwpAQCAtNjI3LDYgKzY3OSw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdGFydFdhdGNo
aW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAgICB2b2lkIGNyZWF0ZUluZmVycmVkVHlw
ZUZvck5ld1Byb3BlcnR5U2xvdyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisKICAgICBz
dGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBj
b25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAK
QEAgLTY1MCw2ICs3MDQsOCBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0
aHJvdWdoIHByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkg
YW5vdGhlciB0aHJlYWQuCiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVy
dHlUYWJsZVVuc2FmZTsKIAorICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGVUYWJsZT4gbV9p
bmZlcnJlZFR5cGVUYWJsZTsKKwogICAgIG11dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3Ry
YW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0X2ZpdHMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNp
b24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxOSArNzUsMTkgQEAgaW5saW5lIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpzdG9yZWRQcm90bwogCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFi
bGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRh
YmxlKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zm
c2V0OwotCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQo
cHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDog
aW52YWxpZE9mZnNldDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5m
ZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
aGFzSW5mZXJyZWRUeXBlKTsKIH0KICAgICAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcykKIHsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4g
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5m
ZXJyZWRUeXBlKQorewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBB
U1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKQEAgLTEwMSw2ICsx
MDEsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgICAg
IHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1
dGVzOworICAgIGhhc0luZmVycmVkVHlwZSA9IGVudHJ5LT5oYXNJbmZlcnJlZFR5cGU7CiAgICAg
cmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260376</attachid>
            <date>2015-09-01 11:49:29 -0700</date>
            <delta_ts>2015-09-10 10:13:21 -0700</delta_ts>
            <desc>more stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106013</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkxNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NTQsNiArNzU2LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTA3LDYgKzE5
MTMsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3Miw2ICsyNTgwLDEwIEBACiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTElu
dE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMEYxQjk0RDRERjAwNzFE
RDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2
NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUHJvcGVydHlUeXBlS2V5Lmg7IHBhdGggPSBkZmcvREZHUHJvcGVydHlUeXBlS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAv
KiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3Rh
bnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgw
MDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDMxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2MjgsOCArNDY0MCw4IEBACiAJCQkJQkMwMkU5OEIw
RTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5zdGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgz
OURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5
REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oICovLAotCQkJCUZFMUMwRkZDMUIxOTNFOTgw
MEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0Eg
LyogRXhjZXB0aW9uLmNwcCAqLywKKwkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhj
ZXB0aW9uLmggKi8sCiAJCQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1
enouY3BwICovLAogCQkJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmggKi8sCiAJCQkJMTQyOUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMu
Y3BwICovLApAQCAtNDY2Miw2ICs0Njc0LDEwIEBACiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2
N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYx
NjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmNwcCAqLywKKwkJCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyog
SW5mZXJyZWRUeXBlLmggKi8sCisJCQkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmNwcCAqLywKKwkJCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuaCAqLywKIAkJCQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5m
ZXJyZWRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAgKi8sCkBAIC00NzEyLDEwICs0NzI4LDEwIEBACiAJCQkJMEYyQjY2QkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAogCQkJCUE3
QkRBRUM0MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuY3BwICovLAogCQkJCUE3
QkRBRUM1MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCAqLywKLQkJCQk4NkZB
OUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKLQkJCQk4NkZB
OUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJOEIwRjQy
NEIxQUJENkRFMjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5jcHAgKi8sCiAJCQkJOEIwRjQy
NEExQUJENkQyRjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5oICovLAorCQkJCTg2RkE5RThG
MTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAorCQkJCTg2RkE5RTkw
MTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5
QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1N0NGNDU3MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAv
KiBKU0NlbGwuY3BwICovLApAQCAtNTAxMyw5ICs1MDI5LDkgQEAKIAkJCQkwRkUwNTAyNDFBQTkw
OTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggKi8sCiAJCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkw
QjM0IC8qIFZNLmNwcCAqLywKIAkJCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAq
LywKLQkJCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8sCiAJCQkJ
RkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8sCiAJCQkJRkU1
OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovLAorCQkJCUZFOTBCQjNB
MUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRUQ5NEYyQjE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovLAogCQkJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFr
R0NNYXAuaCAqLywKQEAgLTUxNjcsNiArNTE4Myw3IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2RjAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAw
N0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAorCQkJCTBGRkM5MjEzMUI5NEU4
M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCiAJCQkJQzJDMEY3Q0Ix
N0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8sCiAJCQkJQzJD
MEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovLAogCQkJ
CTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICov
LApAQCAtNTMxMiw2ICs1MzI5LDcgQEAKIAkJCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5oICovLAogCQkJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYyQjlDRTExOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZGQzkyMTUxQjk0
RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovLAogCQkJCTBGQjE3NjVFMTk2
QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVGMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQkwRjNBMUJGNzFBOUVDQjdEMDAw
REUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwICovLApAQCAtNTg5NSw2ICs1OTEz
LDcgQEAKIAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1w
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQyQ0IyNTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1
dHMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUZFMUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBF
eGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAv
KiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVFMEMwMDFC
NEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTI2NzhGOTExQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjAwOCw2ICs2MDI3LDcgQEAKIAkJCQkwRkJEN0U2
OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Iw
MjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4
ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4
NkMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApA
QCAtNjI5Miw2ICs2MzEyLDcgQEAKIAkJCQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0Mx
QiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5
MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRh
cmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDU3LDYgKzY0NzgsNyBAQAogCQkJCUJDMThDNDFG
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIw
MjhCQTE3OTc2MDNEMDA5ODAyOEMgLyogSlNGdW5jdGlvbklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03Mzk3LDYgKzc0MTksNyBAQAogCQkJCTE0MjgwODJFMTA3RUMwNTcwMDEzRTdCMiAv
KiBDb25zdHJ1Y3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0YxMTg5MUI1QjQw
MDMxQzdGQSAvKiBDb250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVB
QjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzgxMSw2ICs3ODM0
LDcgQEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50
ZXJuYWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5
NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRC
QTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODkx
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRv
dWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90
ZSB0aGF0IGZvciBhbnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBp
dCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8g
aWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLwor
ICAgIC8vIENvbmN1cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisg
ICAgLy8gaWYgKHcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0
aW9uczsKKyAgICAvLyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNv
bXBpbGF0aW9uOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlz
IHdpZGVzcHJlYWQsIGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUo
KSB3aWxsIGxlYXZlCisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkg
c3RhdGUuIEhlbmNlLCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJl
dHdlZW4KKyAgICAvLyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNv
bmQgb25lLCB0aGVuIGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAg
Ly8gY29tcGlsYXRpb24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ug
c29tZSBwaWVjZSBvZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQg
aW52YWxpZGF0ZSB0aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAg
Ly8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAv
LworICAgIC8vIHRoZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRh
dGVkIHN0YXRlIGJldHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBh
cmUgdHdvIHdheXMgdG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBm
aXJlQWxsKCkgd2l0aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcg
d2lsbCBrbm93IHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRh
dGVkIHdoZW4gaXQgZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBu
b3QgZXhwb3NlIHRoZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2
ZSB5b3VyIG93biB3YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1w
dGlvbnMgdGhhdCB0aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBE
RkcgY29kZSBpcyBpbnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAg
ICAgewogICAgICAgICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODkxNjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0
cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAg
IEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQs
IFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0KTsKKyAgICAgICAgcmV0dXJuIGZpbHRl
cihmb3JOb2RlKG5vZGUpLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KICAgICAK
LSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0
dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9u
ZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFic3RyYWN0VmFsdWUm
LCBBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVl
JiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShB
YnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2
aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIzLDcgKzE4MjMsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9z
dHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNG
aW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxs
VXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSkpIHsKICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV0pOwpAQCAtMTgzNSwyMiArMTgzNSwxMiBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgdGhpbmcgd29uJ3QgZ2l2ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVz
LiBJZiBpdCBkaWQsIHdlJ2QKICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsg
dG8gZG8gaGVyZS4KICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2Rl
LCBzdGF0dXNbaV0uY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBz
dGF0dXNbaV0ub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVz
dWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNS
ZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSwgbV9ncmFwaC5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC0xODc0LDcgKzE4NjQsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNT
RVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3Vs
ZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0
ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgIApAQCAtMTg4MiwxMiArMTg3MSwyMyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRo
YXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQg
bWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCiAgICAgICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBj
dXJyZW50bHkgZG9uJ3QuCiAgICAgICAgIAotICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwor
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxs
VXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXI6CisgICAgICAgICAgICBhZG1pdHRlZFR5
cGVzID0gU3BlY090aGVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7
CisgICAgICAgIAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCwgYWRtaXR0ZWRUeXBlcyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMDc4LDEzICsyMDc4LDIwIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG5vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50
cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBkYXRhLm9mZnNl
dCk7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUs
ICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMgdGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3Bl
cnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5nIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8g
cmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdl
IG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAodXN1YWxseQorICAgICAgICAvLyBieSBzb21l
dGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkgQ1NFIGZvciBleGFtcGxlKSB0aGF0IG9ic2N1
cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3
aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSds
bCBmb3JnZXQgd2hhdCB0aGUgcHJvdmVuCisgICAgICAgIC8vIHR5cGUgc2hvdWxkIGhhdmUgYmVl
biwgZXZlbiB0aG91Z2ggd2Ugd291bGQgaGF2ZSBrbm93biBpdCBhdCBwYXJzZSB0aW1lLiBJdCBt
aWdodCBiZSB3b3J0aHdoaWxlCisgICAgICAgIC8vIHRvIHB1dCBhbiBpbmZlcnJlZCB0eXBlIGlu
dG8gdGhlIFN0b3JhZ2VBY2Nlc3NEYXRhLiBOb3RlIHRoYXQgdGhpcyBtaWdodCBiZWNvbWUgcGFy
dGljdWxhcmx5CisgICAgICAgIC8vIHVuZm9ydHVuYXRlIGR1ZSB0byBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NjQ5LgorICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlID0gbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJl
clN0YXRlKCkpOworCisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgaWYg
KHZhbHVlLm1fdmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEyMywxOCArMjEzMCwy
OSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGdl
dENhc2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewot
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBzd2l0Y2ggKGdldENhc2UubWV0aG9kKCkua2luZCgpKSB7
CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDogeworICAgICAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKKyAgICAgICAgICAgICAgICB0aGlz
UmVzdWx0LnNldCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgICAg
ICAgICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKHRoaXNSZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0g
ICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAg
ICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCi0gICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICByZXN1bHQu
bWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZldE1ldGhvZDo6
TG9hZDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZXQsIGdldENhc2UubWV0aG9kKCkub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xv
YmJlclN0YXRlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRv
cCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1
Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKQEAgLTI2MDYsOSArMjYy
NCw5IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXIoCi0gICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBl
cykKIHsKLSAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCkgPT0gRmlsdHJhdGlvbk9L
KQorICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0LCBhZG1pdHRlZFR5cGVzKSA9PSBG
aWx0cmF0aW9uT0spCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgbV9zdGF0ZS5z
ZXRJc1ZhbGlkKGZhbHNlKTsKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24g
MTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw1OSBAQCB2b2lkIEFic3RyYWN0VmFsdWU6
OnNldFR5cGUoR3JhcGgmIGdyYXBoCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCit2b2lk
IEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgY2xlYXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBzZXRU
eXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPdGhlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBzZXRUeXBlKFNwZWNJbnQzMik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6RG91YmxlOgorICAgICAg
ICBzZXRUeXBlKFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBzZXRUeXBlKFNwZWNCeXRlY29kZU51bWJl
cik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAg
ICAgICBzZXQoZ3JhcGgsIGdyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgICAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICBtZXJn
ZShTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9i
amVjdDoKKyAgICAgICAgc2V0VHlwZShncmFwaCwgU3BlY09iamVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc2V0VHlw
ZShncmFwaCwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBtYWtlSGVhcFRvcCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoCisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9i
YmVyU3RhdGUpCit7CisgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAoY2xvYmJl
clN0YXRlID09IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKCk7Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9u
KEdyYXBoJiBncmFwaCwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2RlKQogewog
ICAgIGlmIChyZXByZXNlbnRhdGlvbiA9PSBOb2RlUmVzdWx0RG91YmxlKSB7CkBAIC0xODksOCAr
MjQyLDExIEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKICAgICBy
ZXR1cm4gb2xkTWUgIT0gKnRoaXM7CiB9CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK0ZpbHRy
YXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKIHsK
KyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAo
aXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcg
KzI1NCw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAv
LyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAg
IAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAg
bV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlw
ZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygp
OwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5MTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNs
dWRlICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4
dC5oIgpAQCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAg
IG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9
Ci0gICAgCisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYpOworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJl
c2VudGF0aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxw
dHIpOwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwog
ICAgIApAQCAtMjgwLDggKzI4NCwxNCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewog
ICAgICAgICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KKworICAgIC8v
IEZpbHRlcnMgdGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBJZiB0aGUg
YWRtaXR0ZWRUeXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCisgICAgLy8gaW1wbGlj
aXRseSBmaWx0ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3
aGljaCBhcmUgdXN1YWxseSBhIHN1YnNldCBvZgorICAgIC8vIFNwZWNDZWxsLiBIZW5jZSwgYWZ0
ZXIgdGhpcyBjYWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgbm9uLWNlbGwg
bWVtYmVycy4gQnV0LCB5b3UgY2FuCisgICAgLy8gdXNlIGFkbWl0dGVkVHlwZXMgdG8gcHJlc2Vy
dmUgc29tZSBub24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0IGl0J3Mgd3JvbmcgZm9yIGFkbWl0dGVk
VHlwZXMgdG8gb3ZlcmxhcAorICAgIC8vIHdpdGggU3BlY0NlbGwuCisgICAgRmlsdHJhdGlvblJl
c3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
KFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29u
c3QgRnJvemVuVmFsdWUmIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgREZH
RGVzaXJlZEluZmVycmVkVHlwZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERGRydzIGV4cGVj
dGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3ZSB3YW50IGl0
IHRvIGhhdmUgYSBsaXZlCisvLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0IHRoaXMgb2Jq
ZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFzcyBEZXNpcmVk
SW5mZXJyZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKCkKKyAgICAg
ICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVzaXJlZElu
ZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiBleHBlY3RlZCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwg
bV9leHBlY3RlZChleHBlY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgRGVzaXJlZEluZmVycmVk
VHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3Qo
bnVsbHB0cikKKyAgICAgICAgLCBtX2V4cGVjdGVkKFRvcCkKKyAgICB7CisgICAgfQorCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0ICYmIG1fZXhw
ZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0ZWQpOworICAg
IH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0CisgICAgewor
ICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAg
ICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
IW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0gVG9wOworICAgIH0KKworICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxJbmZlcnJlZFR5
cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVkLmhhc2goKSAqIDc7CisgICAgfQorCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChtX2V4cGVjdGVk
LCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlcihtX29iamVjdCkpOworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcElu
Q29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5
cGUqIG1fb2JqZWN0OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX2V4cGVjdGVkOwor
fTsKKworc3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBh
LCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBE
ZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geworICAgIHR5cGVkZWYg
SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFp
dHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEZXNpcmVkSW5m
ZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw2ICs2NSwxMSBAQCB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0
b3I6CiAgICAgfQogfQogCit2b2lkIEluZmVycmVkVHlwZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBDb21tb25EYXRhJiBj
b21tb24pCit7CisgICAga2V5LmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykp
OworfQorCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogRGVz
aXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiAKQEAgLTkzLDYgKzk4
LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QKICAgICBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCit7Cisg
ICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERlc2lyZWRXYXRj
aHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1
Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMDgsNiArMTE4LDcgQEAgdm9pZCBEZXNpcmVk
V2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQo
Y29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFs
bHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2luZmVycmVkVHlwZXMucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRz
OjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTExNiw3ICsxMjcsOCBAQCBib29sIERlc2lyZWRX
YXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVT
dGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkK
ICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2FkYXB0
aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9pbmZlcnJlZFR5
cGVzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CkBA
IC0xMjcsNiArMTM5LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQo
UAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5m
ZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIg
dmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CiAgICAg
b3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dCht
X2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgi
ICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFR5cGVzLCBjb250ZXh0
KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNp
b24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aCIKQEAgLTkxLDYgKzkyLDE4IEBAIHN0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRB
ZGFwdG8KICAgICB9CiB9OwogCitzdHJ1Y3QgSW5mZXJyZWRUeXBlQWRhcHRvciB7CisgICAgc3Rh
dGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmLCBDb21t
b25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5LmlzU3RpbGxW
YWxpZCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgRHVtcENvbnRleHQqIGNvbnRl
eHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGtleSwgY29udGV4dCkpOwor
ICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlLCB0eXBlbmFt
ZSBBZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+PgogY2xhc3Mg
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMTU5
LDYgKzE3MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBk
b24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hp
Y2ggZG9lcwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3Ro
ZXIgYm9va2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mKTsKKworICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2Fs
bCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVycmVkVHlwZUZvcigpLCB3aGljaCBkb2Vz
CisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0
IERlc2lyZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVy
ZSopOwogICAgIApAQCAtMTg2LDYgKzIwMywxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CiAgICAgfQorICAg
IGJvb2wgaXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNXYXRjaGVkKGtleSk7CisgICAgfQogCiAg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTE5Niw2ICsyMTcsNyBAQCBw
cml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIElu
ZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9y
PiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
PERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlwZUFkYXB0b3I+IG1faW5mZXJyZWRUeXBl
czsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg3LDYgKzg4Nyw1
MCBAQCBib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAgcmV0dXJu
IG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKIH0K
IAorSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoY29uc3Qg
UHJvcGVydHlUeXBlS2V5JiBrZXkpCit7CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtleS5zdHJ1
Y3R1cmUoKSk7CisgICAgCisgICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmdldChrZXkp
OworICAgIGlmIChpdGVyICE9IG1faW5mZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0ZXItPnZhbHVlOworCisgICAgSW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5LnN0cnVj
dHVyZSgpLT5pbmZlcnJlZFR5cGVGb3JPZmZzZXQoa2V5Lm9mZnNldCgpKTsKKyAgICBpZiAoIXR5
cGVPYmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlw
ZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKworICAg
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVzY3JpcHRvciA9IHR5cGVPYmplY3QtPmRl
c2NyaXB0b3IoKTsKKyAgICBpZiAoIXR5cGVEZXNjcmlwdG9yLmlzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAg
ICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZlcnJl
ZFR5cGVzLmFkZChrZXksIHR5cGVEZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVmZXJl
bmNlcy5hZGRMYXppbHkodHlwZU9iamVjdCk7CisgICAgaWYgKHR5cGVEZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlRGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSk7CisKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhp
cyBkZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkK
KyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9w
bGFuLndhdGNocG9pbnRzLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3Qs
IHR5cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKK2Jv
b2wgR3JhcGg6OndhdGNoRGVzaXJlZFR5cGUoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5
KQoreworICAgIGlmICgha2V5LmlzU3RpbGxWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7Cisg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ga2V5LmV4cGVjdGVkKCkuc3RydWN0dXJlKCkp
CisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV9wbGFuLndhdGNo
cG9pbnRzLmFkZExhemlseShrZXkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6
OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJs
b2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTA2MSw3ICsxMTA1
LDcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwogSlNWYWx1ZSBH
cmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkg
eworICAgIGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xk
IHRoZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTIwLDM0IEBAIEpTVmFsdWUgR3JhcGg6OnRy
eUdldENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShiYXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9CiAKK0Fic3RyYWN0
VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRl
IGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICBiYXNlLmZv
ckVhY2goCisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXQoKnRoaXMsIGluZmVy
cmVkVHlwZUZvcihzdHJ1Y3R1cmUsIG9mZnNldCkpOworICAgICAgICAgICAgcmVzdWx0Lm1lcmdl
KHZhbHVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJhY3RW
YWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3RyYWN0
VmFsdWUmIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRl
IGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50
UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1
cmUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShi
YXNlLm1fc3RydWN0dXJlLnNldCgpLCBvZmZzZXQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1
cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRD
b25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQg
Zm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyMSBAQCBw
dWJsaWM6CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhl
IGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAgICAv
LyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0
Y2hDb25kaXRpb24oKS4KICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJv
cGVydHlPZmZzZXQpOworCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFy
ZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVy
ZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFBy
b3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFZh
bHVlRm9yUHJvcGVydHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5
KHN0cnVjdHVyZSwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJl
ZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgUHJv
cGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CisKKyAgICAvLyBUaGlzIHVzZXMg
ZWl0aGVyIGNvbnN0YW50IHByb3BlcnR5IGluZmVyZW5jZSBvciBwcm9wZXJ0eSB0eXBlIGluZmVy
ZW5jZSB0byBkZXJpdmUgYSBnb29kIGFic3RyYWN0CisgICAgLy8gdmFsdWUgZm9yIHNvbWUgcHJv
cGVydHkgYWNjZXNzZWQgd2l0aCB0aGUgZ2l2ZW4gYWJzdHJhY3QgdmFsdWUgYmFzZS4KKyAgICBB
YnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgQWJz
dHJhY3RWYWx1ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7
CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayop
OwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUq
KTsKQEAgLTg1Niw2ICs4NzEsNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7
CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+
IG1fYnl0ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFByb3Bl
cnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOworICAgIEhhc2hNYXA8UHJvcGVydHlUeXBlS2V5LCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKICAgICBEb21pbmF0b3Jz
IG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsK
ICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNkZWZpbmUgREZHUHJvcGVy
dHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIG9iamVj
dCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3BlcnR5J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9m
IFN0cnVjdHVyZSogYW5kIFByb3BlcnR5T2Zmc2V0LgorCitjbGFzcyBQcm9wZXJ0eVR5cGVLZXkg
eworcHVibGljOgorICAgIFByb3BlcnR5VHlwZUtleSgpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUo
bnVsbHB0cikKKyAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9
CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgICwg
bV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIp
CisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCAtIDEpCisgICAgeworICAgIH0KKwor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSAm
JiBtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0OyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQcm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlCisgICAgICAgICAgICAmJiBtX29mZnNl
dCA9PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1
cmUpICsgbV9vZmZzZXQ7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fb2Zmc2V0ID09
IGludmFsaWRPZmZzZXQgLSAxOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAg
IG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIr
IiwgbV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OworfTsKKworc3RydWN0IFByb3BlcnR5VHlwZUtleUhhc2ggeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvcGVydHlUeXBlS2V5
JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6
REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpE
Rkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlBy
b3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg5MTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlYWxOdW1i
ZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgor
ICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZToKICAg
ICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyOSw2ICs1MjI5LDgwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSoKICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVj
dHVyZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpCit7CisgICAg
QVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CisgICAgCisgICAgaWYgKG5vZGUt
PnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQ
UiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFyeT4gc3RydWN0dXJlOworICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSOworICAgICAgICAKKyAgICAgICAgaWYgKHRlbXBHUFIgPT0gSW52YWxp
ZEdQUikgeworICAgICAgICAgICAgc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxHUFJUZW1w
b3Jhcnk+KHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLT5ncHIo
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSB0ZW1wR1BSOwor
ICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAg
IAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsg
KytpKSB7CisgICAgICAgICAgICBkb25lLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hXZWFrU3RydWN0dXIoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUt
PnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJl
KAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlR1BSLCBu
b2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNr
U3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVj
dHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENlbGxPck90aGVyVXNl
OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygp
OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZVJlZ3MpOworICAgICAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVlUmVncywgbm9kZS0+Y2hpbGQxKCks
IFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhl
cih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIGNvbXBp
bGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1wR1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG5vUmVzdWx0KHRoaXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1f
aml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMt
PmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2MzMsNiArNTcwNywyMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2UgCiAgICAgKFNwZWN1bGF0ZUNlbGxP
cGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
SlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNo
SWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisg
ICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFuZC5qc1ZhbHVlUmVncygpLCB0ZW1w
R1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRn
ZSwgU3BlY09iamVjdCkpCkBAIC01OTEzLDYgKzYwMDMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBzcGVjdWxh
dGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgor
ICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMjcsNiArMjIyNyw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiwgR1BSUmVnIGNlbGxHUFIsIEdQ
UlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKik7CiAg
ICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhH
UFJSZWcpOwpAQCAtMjM4Niw2ICsyMzg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRl
RG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CiAg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3Ro
ZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVj
dWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2Up
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgCisKICAgICAvLyBJ
biBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB2ZXJpZnkgd2hldGhl
ciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQsIGFuZAogICAgIC8vIGlmIG5vdCwgZW51bWVy
YXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMgb25seSBpbiBjYXNlcyB3aGVyZSB0
aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBtZWFuaW5nZnVsbHkgc3BlY2lhbCwgbGlrZSBm
b3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gbV9zZXQub25seVN0cnVjdHVyZSgpOwog
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlz
VG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KICAgICAKICAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3
OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNl
IEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnByaW50KCJLbm93bkNlbGwiKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiQ2Vs
bE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAg
ICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkJvb2xlYW5Vc2UsCiAgICAgQ2VsbFVzZSwK
ICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9yT3RoZXJVc2UsCiAgICAgT2JqZWN0VXNlLAog
ICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2JqZWN0VXNlLApAQCAtMTA4LDYgKzEwOSw4IEBA
IGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICBjYXNlIENlbGxV
c2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAg
ICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGwgfCBTcGVjT3Ro
ZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVjT2JqZWN0OwogICAg
IGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNyw2ICs0
MTcsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAg
ICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxs
VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAgICAg
IGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAg
ICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgICAgICAgICBjYXNlIE9i
amVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjUs
MjEgKzIwMjUsNTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVj
dHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKICAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBleGl0S2luZCA9
IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4aXRLaW5kID0g
QmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5s
b2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKLSAgICAg
ICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVl
KGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIFt0
aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vh
a1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKKworICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTog
eworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAg
ICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVl
VmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJl
U2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1
Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1
cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+
Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2Us
IG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGpzVmFs
dWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1
cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUt
PmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxsKCkKQEAgLTc1MDgsNiAr
NzU0Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxs
T3JPdGhlclVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAg
QVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNzU4OCw2ICs3NjI2LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGxvd0NlbGwo
ZWRnZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90Q2VsbCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90aGVyIG5vdCBjZWxsIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9v
dXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUoaXNOb3RDZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpc05vdENlbGwsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZU
TF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090
aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVNYWNoaW5lSW50KEVkZ2UgZWRnZSkKICAgICB7
CiAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNzUgQEAgVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4mIEFzc2VtYgogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwogfQogCitBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNo
SWZOb3RUeXBlKAorICAgIEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQXNzZW1ibHlIZWxw
ZXJzOjpKdW1wTGlzdCByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChq
dW1wKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFu
OgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1wR1BS
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAg
ICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6RG91YmxlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aElmSW50MzIocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVy
KHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVy
OgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3MpKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICByZXN1
bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaFN0cnVjdHVyZShyZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUo
KSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdz
LCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykp
OworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShyZWdzLnBheWxvYWRHUFIo
KSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAg
ICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAg
ICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIG9rLmxpbmsodGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4oRlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hEb3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2
aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYgKzU2MywxOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KKworICAgIEp1bXBMaXN0IGJyYW5j
aElmTm90VHlwZShKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEp1
bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRI
YW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1c3Rl
ZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyNl
bmRpZgorICAgIH0KICAgICAKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNl
dChwdHJkaWZmX3QgYnl0ZU9mZnNldCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNCw4ICs0MDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsK
IAotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVs
YXRpb25hbENvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSopOwotCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTg5MTYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyNTksMjYgKzEyNTksNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0VGFnQXNC
b29sSW1tCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLUpJVDo6SnVtcCBKSVQ6OmJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaDMyKGNvbmRpdGlvbiwgbGVmdEhhbmRT
aWRlLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5pZCgpKSk7Ci0jZWxzZQotICAgIHJldHVybiBi
cmFuY2hQdHIoY29uZGl0aW9uLCBsZWZ0SGFuZFNpZGUsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSk7Ci0jZW5kaWYKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1NYWNyb0Fzc2VtYmxlcjo6
SnVtcCBicmFuY2hTdHJ1Y3R1cmUoTWFjcm9Bc3NlbWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi17Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gaml0LmJyYW5j
aDMyKGNvbmRpdGlvbiwgbGVmdEhhbmRTaWRlLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHN0cnVjdHVyZS0+aWQoKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaml0LmJyYW5jaFB0cihjb25k
aXRpb24sIGxlZnRIYW5kU2lkZSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0
dXJlKSk7Ci0jZW5kaWYKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2lu
Zm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVk
VHlwZSkgfTsKKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZShWTSYgdm0pCit7
CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJ
bmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUodm0pOworICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVk
VHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlw
ZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJy
ZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZSog
aW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworCisgICAgaWYgKGlu
ZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25h
bEZpbmFsaXplcihpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJlLmdldCgpKTsKK30KKworSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9yVmFsdWUoSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHJldHVy
biBCb29sZWFuOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gT3RoZXI7CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIElu
dDMyOworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gRG91YmxlOwor
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nOworICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAg
aWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKE9iamVjdFdpdGhTdHJ1Y3R1
cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3Q7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRvcDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQoreworICAgIGlmICgqdGhp
cyA9PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICp0aGlzID0g
VG9wOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0
T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBE
b3VibGU6CisgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgbV9raW5kID0gTnVtYmVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIERvdWJs
ZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoK
KyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBOdW1iZXI7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRv
cDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgTnVtYmVyOgorICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2lu
ZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2Jq
ZWN0OgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAqdGhp
cyA9IG90aGVyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAg
bV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAqdGhpcyA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVj
dE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1f
a2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAg
Y2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
Y2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVtb3Zl
U3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAqdGhpcyA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47
CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMoY29u
c3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRvciBtZXJnZWQgPSAq
dGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAqdGhpcyA9PSBtZXJn
ZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1
bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5
cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJlLmdldCgp
KQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJy
ZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3Rp
bGxWYWxpZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0
b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9wKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9PSBl
eHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZChjb25zdCBEZXNj
cmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIHJldHVybiBpc1N0aWxsVmFsaWQobG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChk
ZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQu
YWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChX
YXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIGRlc2NyaXB0b3IoKSk7Cit9CisKK3ZvaWQg
SW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYgbG9ja2VyLCBWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgRGVzY3JpcHRvciBteVR5
cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3JpcHRvciBvdGhlclR5cGUgPSBEZXNj
cmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5cGUubWVyZ2Uob3RoZXJUeXBlKTsK
KworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0gbXlUeXBlKTsgLy8gVGhlIHR5cGUg
bXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KKworICAgIHNldChs
b2NrZXIsIHZtLCBteVR5cGUpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6bWFrZVRvcChWTSYg
dm0pCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQo
bG9ja2VyLCB2bSwgVG9wKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9y
KQoreworICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5n
IG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAor
ICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9j
ay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGgg
c28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVy
R0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6
IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2
ZSB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2Ny
aXB0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0
IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rl
c2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUg
bmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9u
bHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0
cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCgh
ZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKTsKKworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRo
YXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElm
CisgICAgLy8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNv
IHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dh
dGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2Ug
Y2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdk
IGFscmVhZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRl
KCkgIT0gSXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhw
ZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0
Y2ggdGhpcyB0eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3Vt
ZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3Jl
IHRoaW5ncyBmb3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7
CisKKyAgICAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoIkluZmVycmVkIHR5cGUgY2hhbmdl
ZCIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9i
amVjdCBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkpCisgICAgICAgIG1fc3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgIC8vIEFkZCBh
IG5ldyBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgorICAgIGlm
IChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkg
eworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdl
IGdldCBoZXJlLgorICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkg
PT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odGhp
cywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9y
LnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChtX3N0cnVjdHVyZS5nZXQoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Ig
a2luZC4KKyAgICBtX2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2Vy
dCB0aGF0IHdlIGRpZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBu
ZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgp
Cit7CisgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX3BhcmVudC0+bV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlw
dG9yIG5ld0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRv
ci5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3Jp
cHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJy
ZWRTdHJ1Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3Ry
dWN0dXJlKQoreworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmZp
cmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikKK3sKKyAgICBtX3BhcmVudC0+cmVtb3ZlU3Ry
dWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fcGFy
ZW50KS0+dm0oKTsKKworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudCkpOworICAg
IAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICBt
X3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVHlwZTo6S2luZCBraW5kKQoreworICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIG91
dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT3Ro
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OkRvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIG91dC5wcmlu
dCgiTnVtYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3Ry
aW5nOgorICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmlu
dCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBvdXQucHJpbnQo
Ik9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAg
ICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmZkZWYg
SW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlX2gKKworI2luY2x1ZGUgIkNvbmN1
cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CisvLyBUaGlzIGlzIGFuIG9iamVjdCB1c2VkIGZvciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBl
cyBvZiBvYmplY3QgcHJvcGVydGllcy4KKworY2xhc3MgSW5mZXJyZWRUeXBlIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0
YXRpYyBJbmZlcnJlZFR5cGUqIGNyZWF0ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAg
ZW51bSBLaW5kIDogdWludDhfdCB7CisgICAgICAgIEJvdHRvbSwKKyAgICAgICAgQm9vbGVhbiwK
KyAgICAgICAgT3RoZXIsCisgICAgICAgIEludDMyLAorICAgICAgICBEb3VibGUsCisgICAgICAg
IE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAor
ICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAg
ICAgICBPYmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisgICAgY2xhc3MgRGVz
Y3JpcHRvciB7CisgICAgcHVibGljOgorICAgICAgICBEZXNjcmlwdG9yKCkKKyAgICAgICAgICAg
IDogbV9raW5kKEJvdHRvbSkKKyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRGVzY3JpcHRvcihLaW5kIGtpbmQsIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogbV9raW5kKGtpbmQpCisg
ICAgICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yVmFsdWUoSlNWYWx1ZSk7CisKKyAgICAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2tpbmQgPT0gQm90dG9tICYmICFtX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisg
ICAgICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKKyAgICAg
ICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQm90
dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQm9v
bGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7CisgICAgICAg
ICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzRG91YmxlKCk7CisgICAgICAgICAgICBjYXNlIE51bWJlcjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGNh
c2UgU3RyaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpOworICAg
ICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1
Y3R1cmU7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCisgICAgICAgICAg
ICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCkgPT0gbV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdE9y
T3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkg
fHwgdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgVG9wOgorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09
IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1
cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsK
KyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IERlc2NyaXB0b3ImKTsK
KyAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvdGhlciBvbmUu
CisgICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYpIGNvbnN0OworCisgICAg
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgS2luZCBtX2tpbmQ7CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Cisg
ICAgfTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NrOyB9CisKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1f
c3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQor
ICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcihs
b2NrZXIpOworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKCkua2luZCgpOyB9CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBj
b25zdCB7IHJldHVybiBkZXNjcmlwdG9yKCkuc3RydWN0dXJlKCk7IH0KKworICAgIGJvb2wgaXNS
ZWxldmFudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7IH0KKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBz
dG9yZS4gSXQncyBub3QgcmVsZXZhbnQgaWYgaXQncyBUb3AuCisgICAgQUxXQVlTX0lOTElORSBi
b29sIHdpbGxTdG9yZVZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIGlmICghZGVzY3Jp
cHRvcihsb2NrZXIpLmluY2x1ZGVzVmFsdWUobG9ja2VyLCB2YWx1ZSkpCisgICAgICAgICAgICB3
aWxsU3RvcmVWYWx1ZVNsb3cobG9ja2VyLCB2bSwgdmFsdWUpOworICAgICAgICByZXR1cm4ga2lu
ZChsb2NrZXIpICE9IFRvcDsKKyAgICB9CisKKyAgICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlz
IHR5cGUgaXJyZWxldmFudC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mKTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBpdCBjdXJyZW50bHkgbWFrZXMgc2Vuc2UgdG8gd2F0Y2ggdGhpcyBJbmZlcnJl
ZFR5cGUgZm9yIHRoaXMgZGVzY3JpcHRvci4gTm90ZSB0aGF0CisgICAgLy8gdGhpcyB3aWxsIGFs
d2F5cyByZXR1cm4gZmFsc2UgZm9yIFRvcC4KKyAgICBib29sIGNhbldhdGNoKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYpOworICAgIGJvb2wgY2Fu
V2F0Y2goY29uc3QgRGVzY3JpcHRvciYpOworICAgIAorICAgIHZvaWQgYWRkV2F0Y2hwb2ludChj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqKTsKKyAgICB2b2lk
IGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKFZNJik7CisgICAgfkluZmVy
cmVkVHlwZSgpOworCisgICAgdm9pZCB3aWxsU3RvcmVWYWx1ZVNsb3coY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFZNJiwgSlNWYWx1ZSk7CisgICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFZNJiwgRGVzY3JpcHRvcik7CisgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUo
KTsKKworICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworICAgIAorICAgIEtp
bmQgbV9raW5kIHsgQm90dG9tIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSA6IHB1
YmxpYyBXYXRjaHBvaW50LCBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7CisgICAgcHVi
bGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZShJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3Ry
dWN0dXJlKik7CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZS5nZXQoKTsgfTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBm
aXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBJbmZlcnJlZFR5cGUqIG1fcGFyZW50OworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3Ry
dWN0dXJlPiBtX3N0cnVjdHVyZTsKKworICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0
Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdv
dWxkbid0IGJlCisgICAgLy8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhp
cyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBE
RkcKKyAgICAvLyB0aHJlYWQuIFRoZSBERkcgd2lsbCB1c2UgdGhlIEluZmVycmVkVHlwZSBhcyB0
aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVzLgorICAgIElubGluZVdhdGNocG9pbnRTZXQgbV93YXRj
aHBvaW50U2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkluZmVycmVkVHlwZTo6S2lu
ZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZVRhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJl
ZFR5cGVUYWJsZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlVGFibGUiLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZVRhYmxlKSB9OworCitJbmZlcnJlZFR5cGVUYWJsZSog
SW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlVGFi
bGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZVRhYmxl
Pih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlVGFibGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFi
bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZl
cnJlZFR5cGVUYWJsZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7Cisg
ICAgaW5mZXJyZWRUeXBlVGFibGUtPkluZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFi
bGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVU
YWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworCisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBWZWN0b3I8UHJvcGVydHlPZmZz
ZXQ+IHRvUmVtb3ZlOworICAgIAorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3RhYmxlKSB7Cisg
ICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXNSZWxldmFudCgpKQorICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJmVudHJ5LnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgfQorCisgICAgZm9yIChQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgOiB0b1JlbW92ZSkKKyAgICAgICAgbV90YWJsZS5yZW1vdmUob2Zmc2V0KTsKK30KKwor
SW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpjbG9uZShWTSYgdm0pCit7Cisg
ICAgVmVjdG9yPFRhYmxlVHlwZTo6S2V5VmFsdWVQYWlyVHlwZSwgOD4gdG9BZGQ7CisgICAgCisg
ICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV90YWJsZSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LnZh
bHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICAgICAgdG9BZGQuYXBwZW5kKGVudHJ5KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBjcmVh
dGUodm0pOworCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHRvQWRkKQorICAgICAgICByZXN1bHQt
Pm1fdGFibGUuYWRkKGVudHJ5LmtleSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4odm0sIHJl
c3VsdCwgZW50cnkuZ2V0KCkpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0luZmVycmVk
VHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBs
b2NrZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3Vs
dCA9IG1fdGFibGUuZ2V0KG9mZnNldCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgLy8gVGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHBydW5lIGludmFs
aWRhdGVkIHR5cGVzLgorICAgIGlmICghcmVzdWx0LT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAg
bV90YWJsZS5yZW1vdmUob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJs
ZTo6Z2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCBvZmZzZXQpOworfQorCiti
b29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIEluZmVycmVkVHlwZSogdHlwZSA9IG1fdGFibGUuZ2V0KG9mZnNl
dCk7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodHlw
ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBtX3RhYmxlLnJlbW92ZShvZmZzZXQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJ
bmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBDb25jdXJyZW50SklUbG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIEluZmVycmVk
VHlwZSogdHlwZSA9IG1fdGFibGUudGFrZShvZmZzZXQpOworICAgIGlmICghdHlwZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdHlwZS0+bWFrZVRvcCgpOworfQorCitib29sIEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGUg
PSBJbmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgaWYgKCF0eXBlLT53aWxsU3RvcmVWYWx1
ZSh2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGaXJlIHRoZSBi
YXJyaWVyIGJlZm9yZSBncmFiYmluZyB0aGUgbG9jay4KKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJy
ZWRUeXBlPiB0eXBlQmFycmllcih2bSwgdGhpcywgdHlwZSk7CisgICAgCisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdGFibGUuYWRk
KG9mZnNldCwgdHlwZUJhcnJpZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRh
YmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSW5mZXJyZWRU
eXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRh
YmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2Vs
bCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUgU3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFu
ZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8gbWFuYWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQn
cyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRoaW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3
aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRh
YmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCisvLyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVk
VHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFyZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0
aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFzIGJlaW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3Ry
dWN0dXJlIikuCisKK2NsYXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2Vs
bCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZl
cnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwor
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogY2xvbmUoVk0mKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2Nr
KCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisgICAgSW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBJbmZlcnJlZFR5cGUqIGdl
dChQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVk
VHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUu
IEl0J3Mgbm90CisgICAgLy8gcmVsZXZhbnQgaWYgaXQncyBUb3AuIE5vdGUgdGhhdCB0aGlzIHRh
YmxlIHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3AgZW50cmllcy4KKyAgICBib29sIHdpbGxTdG9y
ZVZhbHVlKFZNJiwgUHJvcGVydHlPZmZzZXQsIEpTVmFsdWUpOworCisgICAgLy8gSW52YWxpZGF0
ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3Jl
IGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5
T2Zmc2V0KTsKKworICAgIC8vIFRoaXMgY3JlYXRlcyBhIG5ldyBJbmZlcnJlZFR5cGUgZm9yIHRo
aXMgcHJvcGVydHkuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBuZWVkZWQgYmVjYXVzZQorICAg
IC8vIHdpbGxTdG9yZVZhbHVlKCkgYXNzdW1lcyB0aGF0IGlmIHRoZXJlIGlzbid0IGFuIEluZmVy
cmVkVHlwZSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eSwgdGhlbiBpdCdzCisgICAgLy8gYmVjYXVz
ZSB3ZSd2ZSBhbHJlYWR5IGNvbmNsdWRlZCB0aGF0IHRoZSBwcm9wZXJ0eSBzaG91bGQgbm90IGhh
dmUgYSB0eXBlLgorICAgIGJvb2wgY3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkoVk0m
LCBQcm9wZXJ0eU9mZnNldCwgSlNWYWx1ZSk7CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBl
VGFibGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlVGFibGUoKTsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxQcm9wZXJ0eU9mZnNldCwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4sIFdURjo6SW50
SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
UHJvcGVydHlPZmZzZXQ+PiBUYWJsZVR5cGU7CisgICAgCisgICAgVGFibGVUeXBlIG1fdGFibGU7
CisgICAgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE0
LDYgKzEyMTQsOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUt
Pmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50
QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAob2Zm
c2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTEyNTMsNiArMTI1NSwxMCBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJl
KCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgeworICAgICAgICAvLyBDaGVj
ayBpZiB3ZSBzaG91bGQgZG8gdHlwZSBpbmZlcmVuY2UuCisgICAgICAgIGlmIChzbG90LmNvbnRl
eHQoKSA9PSBQdXRCeUlkKQorICAgICAgICAgICAgc3RydWN0dXJlLT5jcmVhdGVJbmZlcnJlZFR5
cGVGb3JOZXdQcm9wZXJ0eSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgIAogICAg
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMjY5LDEyICsxMjc1LDIyIEBAIGlu
bGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICB9CiAKICAgICB1bnNp
Z25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5
cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVu
dEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlk
T2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0
cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
IHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJ
S0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7CisgICAgICAgICAgICBib29sIGlzU3RpbGxWYWxpZDsK
KyAgICAgICAgICAgIGlmIChzbG90LmNvbnRleHQoKSA9PSBQdXRCeUlkKQorICAgICAgICAgICAg
ICAgIGlzU3RpbGxWYWxpZCA9IHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWUodm0sIG9mZnNldCwg
dmFsdWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlzU3RpbGxWYWxpZCA9
IHN0cnVjdHVyZS0+bWFrZVRvcCh2bSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WSghaXNTdGlsbFZhbGlkKSkKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnVwZGF0ZUhhc0lu
ZmVycmVkVHlwZUZvclByb3BlcnR5KHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICB9CiAgICAg
ICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCkBAIC0xMjk0LDYgKzEzMTAsOCBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKICAgICAKICAg
ICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZk
ZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBpZiAoc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJ
ZCkKKyAgICAgICAgc3RydWN0dXJlLT5jcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eSh2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAx
ODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDcsMTEgKzM0NywxNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0
KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0g
bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1
cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwog
ICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1
dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdl
dChzdHJ1Y3R1cmUtPm1fb2Zmc2V0KSkKKyAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlw
ZSA9IHRydWU7CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwg
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAg
CkBAIC00NjEsNiArNDY1LDE2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVz
KTsKICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OworICAgIGlmIChzdHJ1Y3R1
cmUtPm1faW5mZXJyZWRUeXBlVGFibGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHBy
b2JhYmx5IGdldCBzb21lIHNwYWNlIHNhdmluZ3MgYnkgaGF2aW5nIHRyYW5zaXRpb25zIHNoYXJl
IGEgdGFibGUgd2l0aCB0aGVpcgorICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRoaXMgbWVhbnMg
dGhhdCB0aGUgZmlyc3QgcHJvcGVydHkgbmFtZSB5b3UgdXNlIHdoZW4gY3JlYXRpbmcgYW4gb2Jq
ZWN0IGRldGVybWluZXMKKyAgICAgICAgLy8gdGhlICJzcGFjZSIgb2YgaW5mZXJyZWQgdHlwZXMg
dGhhdCB0aGUgc3RydWN0dXJlIGxpdmVzIGluLCBhbmQgdGhlcmVhZnRlciwgZXZlcnl0aGluZyBp
cyBzaGFyZWQuCisgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoaXMgY3VycmVudGx5IHdvbid0
IHdvcmssIGJlY2F1c2Ugb2YgaG93IGFkZGluZyBuZXcgcHJvcGVydGllcyB3b3Jrcy4gV2UgYXNz
dW1lCisgICAgICAgIC8vIHRoYXQgdGhlIGluZmVycmVkIHR5cGUgdGFibGUgaGFkIG5ldmVyIHNl
ZW4gdGhlIHByb3BlcnR5IGJlZm9yZS4gV2UgY291bGQgZml4IHRoaXMgYnkgZW5zdXJpbmcKKyAg
ICAgICAgLy8gdGhhdCB0aGUgSW5mZXJyZWRUeXBlVGFibGUgZG9lc24ndCBmb3JnZXQgdGhhdCBp
dCBoYWQgYW4gZW50cnkgZm9yIHR5cGUgd2hlbmV2ZXIgdGhhdCB0eXBlIGdvZXMKKyAgICAgICAg
Ly8gdG8gVG9wLgorICAgICAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlID0gc3Ry
dWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLT5jbG9uZSh2bSk7CisgICAgfQogCiAgICAgb2Zm
c2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCkBA
IC04MzgsNiArODUyLDY1IEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQ
cm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBT
dHJ1Y3R1cmU6OnVwZGF0ZUluZmVycmVkVHlwZUZvclByb3BlcnR5KFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7
CisgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOworCisgICAg
Ly8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgorICAgIFBy
b3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKworICAgIGlmICghcHJvcGVydHlUYWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0
eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJl
ZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxl
LT5nZXQoZW50cnktPm9mZnNldCk7CisgICAgZWxzZQorICAgICAgICBlbnRyeS0+aGFzSW5mZXJy
ZWRUeXBlID0gZmFsc2U7Cit9CisKK3ZvaWQgU3RydWN0dXJlOjpjcmVhdGVJbmZlcnJlZFR5cGVG
b3JOZXdQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKKworICAgIC8vIENyZWF0ZSB0
aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgc28gdGhh
dCB3ZSBkb24ndCBHQyBhZnRlciB3ZSBoYXZlIGFscmVhZHkKKyAgICAvLyBncmFiYmVkIGEgcG9p
bnRlciBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuCisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxl
ID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKyAgICBpZiAoIXRhYmxlKSB7CisgICAgICAg
IHRhYmxlID0gSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUJhcnJpZXIoKTsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVUYWJsZS5zZXQodm0sIHRo
aXMsIHRhYmxlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290
IGEgcHJvcGVydHkgdGFibGUuCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKKyAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwor
CisgICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhl
IGdpdmVuIHByb3BlcnR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZQorICAgIC8v
IG5vdy4KKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZSk7CisKKyAgICBQcm9wZXJ0eU1hcEVudHJ5
KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgIEFT
U0VSVChlbnRyeSk7CisKKyAgICAvLyBTaW5jZSB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCB3ZSBt
dXN0IG5vdCBoYXZlIHNldCBoYXNJbmZlcnJlZFR5cGUgcHJldmlvdXNseS4KKyAgICBBU1NFUlQo
IWVudHJ5LT5oYXNJbmZlcnJlZFR5cGUpOworICAgIAorICAgIGlmICghdGFibGUtPmNyZWF0ZUlu
ZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KHZtLCBlbnRyeS0+b2Zmc2V0LCB2YWx1ZSkpIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyBzdXBlciByYXJlIGFuZCB3ZWlyZCwgYnV0IHdlIG5lZWQgdG8gaGFu
ZGxlIGl0LiBJdCdsbCBvY2N1ciBpZiB0aGUgdmFsdWUgaGFzIGEgdHlwZSB0aGF0CisgICAgICAg
IC8vIHdlIGRvbid0IGhhdmUgdHlwZSBpbmZlcmVuY2UgcnVsZXMgZm9yLgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRydWU7Cit9CisKICNp
ZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKIFByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMqIHBy
b3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEs
MTMgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBr
ZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmlidXRlczsK
KyAgICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBvciBub3Qg
YSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0YWJs
ZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGlyZWN0SW50
ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtleShudWxscHRy
KQogICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMo
MCkKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAK
QEAgLTkzLDYgKzk1LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgICAgICA6IGtl
eShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0
dHJpYnV0ZXMpCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpAQCAtMzIz
LDYgKzMyNiw3IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3Bl
cnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcyk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsKIAogICAg
IC8vIFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwgY2FsbCB5
b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1cmUn
cyBsb2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBoZWxkIG9y
IG5vdCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNDc3LDYgKzQ4MSw1NCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vz
c2FyeSh2bSk7CiAgICAgfQogCisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhIW1faW5mZXJyZWRUeXBlVGFibGU7CisgICAgfQorCisgICAg
SW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJy
ZWRUeXBlVGFibGUuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gdGFibGUtPmdldChvZmZzZXQp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGlzIHN0aWxsIHZhbGlkLgorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9
IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisgICAgICAgIGlmIChMSUtFTFkoIXRhYmxlKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSB0YWJsZS0+
d2lsbFN0b3JlVmFsdWUodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICBpZiAodGFibGUtPmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIG1faW5mZXJyZWRUeXBlVGFibGUuY2xlYXIoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGFsd2F5cywg
dG8gbWF0Y2ggdGhlIHJldHVybiB2YWx1ZSBzZW1hbnRpY3Mgb2Ygd2lsbFN0b3JlVmFsdWUoKTog
aWYgaXQgcmV0dXJucyBmYWxzZSwKKyAgICAvLyB0aGVuIHRoZSBwcm9wZXJ0eSB0eXBlIGlzIGlu
dmFsaWQgKHdoaWNoIGlzIGFsd2F5cykuCisgICAgQUxXQVlTX0lOTElORSBib29sIG1ha2VUb3Ao
Vk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBJbmZlcnJlZFR5
cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgICAgICBpZiAo
TElLRUxZKCF0YWJsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRhYmxl
LT5tYWtlVG9wKHZtLCBvZmZzZXQpOworICAgICAgICBpZiAodGFibGUtPmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIG1faW5mZXJyZWRUeXBlVGFibGUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHZvaWQgdXBkYXRlSGFzSW5mZXJyZWRUeXBlRm9yUHJvcGVydHko
Vk0mLCBQcm9wZXJ0eU5hbWUpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNyZWF0ZUluZmVy
cmVkVHlwZUZvck5ld1Byb3BlcnR5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBjb25kaXRpb25z
IGNvdWxkIHByb2JhYmx5IGJlIHJlZmluZWQuCisgICAgICAgIGlmIChpc0RpY3Rpb25hcnkoKSB8
fCB0cmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHlTbG93KHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVy
ZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWlu
ZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxk
IGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02MjcsNiArNjc5LDggQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAg
IHZvaWQgY3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3UHJvcGVydHlTbG93KFZNJiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlKTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVu
Z3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JO
b25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAtNjUwLDYgKzcwNCw4IEBAIHByaXZhdGU6CiAgICAg
Ly8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0Ms
IGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8
UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVy
PEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJ
bmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01Q
SUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZz
ZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE5ICs3
NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvCiAKIEFMV0FZ
U19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
LSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgUHJv
cGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSkKLSAg
ICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRy
eSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgIHJldHVybiBl
bnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlkT2Zmc2V0OworICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogfQogICAgIAogQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogeworICAgIGJvb2wgaGFzSW5m
ZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
aGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBh
dHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpCit7CiAgICAgQVNTRVJUKCFpc0NvbXBp
bGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0g
aW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICBhdHRy
aWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7CisgICAgaGFzSW5mZXJyZWRUeXBlID0gZW50cnkt
Pmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260936</attachid>
            <date>2015-09-10 10:13:21 -0700</date>
            <delta_ts>2015-09-10 14:11:17 -0700</delta_ts>
            <desc>a little more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106553</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkxNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NTQsNiArNzU2LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTA3LDYgKzE5
MTMsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3Miw2ICsyNTgwLDEwIEBACiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTElu
dE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMEYxQjk0RDRERjAwNzFE
RDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2
NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUHJvcGVydHlUeXBlS2V5Lmg7IHBhdGggPSBkZmcvREZHUHJvcGVydHlUeXBlS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAv
KiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3Rh
bnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgw
MDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDMxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2MjgsOCArNDY0MCw4IEBACiAJCQkJQkMwMkU5OEIw
RTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5zdGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgz
OURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5
REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oICovLAotCQkJCUZFMUMwRkZDMUIxOTNFOTgw
MEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0Eg
LyogRXhjZXB0aW9uLmNwcCAqLywKKwkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhj
ZXB0aW9uLmggKi8sCiAJCQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1
enouY3BwICovLAogCQkJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmggKi8sCiAJCQkJMTQyOUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMu
Y3BwICovLApAQCAtNDY2Miw2ICs0Njc0LDEwIEBACiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2
N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYx
NjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmNwcCAqLywKKwkJCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyog
SW5mZXJyZWRUeXBlLmggKi8sCisJCQkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmNwcCAqLywKKwkJCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuaCAqLywKIAkJCQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5m
ZXJyZWRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAgKi8sCkBAIC00NzEyLDEwICs0NzI4LDEwIEBACiAJCQkJMEYyQjY2QkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAogCQkJCUE3
QkRBRUM0MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuY3BwICovLAogCQkJCUE3
QkRBRUM1MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCAqLywKLQkJCQk4NkZB
OUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKLQkJCQk4NkZB
OUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJOEIwRjQy
NEIxQUJENkRFMjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5jcHAgKi8sCiAJCQkJOEIwRjQy
NEExQUJENkQyRjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5oICovLAorCQkJCTg2RkE5RThG
MTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAorCQkJCTg2RkE5RTkw
MTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5
QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1N0NGNDU3MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAv
KiBKU0NlbGwuY3BwICovLApAQCAtNTAxMyw5ICs1MDI5LDkgQEAKIAkJCQkwRkUwNTAyNDFBQTkw
OTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggKi8sCiAJCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkw
QjM0IC8qIFZNLmNwcCAqLywKIAkJCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAq
LywKLQkJCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8sCiAJCQkJ
RkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8sCiAJCQkJRkU1
OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovLAorCQkJCUZFOTBCQjNB
MUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRUQ5NEYyQjE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovLAogCQkJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFr
R0NNYXAuaCAqLywKQEAgLTUxNjcsNiArNTE4Myw3IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2RjAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAw
N0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAorCQkJCTBGRkM5MjEzMUI5NEU4
M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCiAJCQkJQzJDMEY3Q0Ix
N0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8sCiAJCQkJQzJD
MEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovLAogCQkJ
CTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICov
LApAQCAtNTMxMiw2ICs1MzI5LDcgQEAKIAkJCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5oICovLAogCQkJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYyQjlDRTExOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZGQzkyMTUxQjk0
RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovLAogCQkJCTBGQjE3NjVFMTk2
QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVGMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQkwRjNBMUJGNzFBOUVDQjdEMDAw
REUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwICovLApAQCAtNTg5NSw2ICs1OTEz
LDcgQEAKIAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1w
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQyQ0IyNTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1
dHMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUZFMUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBF
eGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAv
KiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVFMEMwMDFC
NEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTI2NzhGOTExQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjAwOCw2ICs2MDI3LDcgQEAKIAkJCQkwRkJEN0U2
OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Iw
MjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4
ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4
NkMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApA
QCAtNjI5Miw2ICs2MzEyLDcgQEAKIAkJCQkwRjIzNUJFNDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0Mx
QiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5
MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRh
cmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDU3LDYgKzY0NzgsNyBAQAogCQkJCUJDMThDNDFG
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIw
MjhCQTE3OTc2MDNEMDA5ODAyOEMgLyogSlNGdW5jdGlvbklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03Mzk3LDYgKzc0MTksNyBAQAogCQkJCTE0MjgwODJFMTA3RUMwNTcwMDEzRTdCMiAv
KiBDb25zdHJ1Y3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0YxMTg5MUI1QjQw
MDMxQzdGQSAvKiBDb250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVB
QjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzgxMSw2ICs3ODM0
LDcgQEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQxQjg0MjFDMDAwNDEzODU2IC8qIEpTSW50
ZXJuYWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5
NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRC
QTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODkx
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRv
dWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90
ZSB0aGF0IGZvciBhbnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBp
dCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8g
aWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLwor
ICAgIC8vIENvbmN1cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisg
ICAgLy8gaWYgKHcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0
aW9uczsKKyAgICAvLyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNv
bXBpbGF0aW9uOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlz
IHdpZGVzcHJlYWQsIGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUo
KSB3aWxsIGxlYXZlCisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkg
c3RhdGUuIEhlbmNlLCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJl
dHdlZW4KKyAgICAvLyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNv
bmQgb25lLCB0aGVuIGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAg
Ly8gY29tcGlsYXRpb24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ug
c29tZSBwaWVjZSBvZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQg
aW52YWxpZGF0ZSB0aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAg
Ly8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAv
LworICAgIC8vIHRoZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRh
dGVkIHN0YXRlIGJldHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBh
cmUgdHdvIHdheXMgdG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBm
aXJlQWxsKCkgd2l0aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcg
d2lsbCBrbm93IHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRh
dGVkIHdoZW4gaXQgZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBu
b3QgZXhwb3NlIHRoZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2
ZSB5b3VyIG93biB3YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1w
dGlvbnMgdGhhdCB0aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBE
RkcgY29kZSBpcyBpbnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAg
ICAgewogICAgICAgICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODkxNjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0
cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAg
IEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQs
IFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0KTsKKyAgICAgICAgcmV0dXJuIGZpbHRl
cihmb3JOb2RlKG5vZGUpLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KICAgICAK
LSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0
dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNv
bnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9u
ZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFic3RyYWN0VmFsdWUm
LCBBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVl
JiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShB
YnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2
aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIzLDcgKzE4MjMsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9z
dHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNG
aW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxs
VXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSkpIHsKICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV0pOwpAQCAtMTgzNSwyMiArMTgzNSwxMiBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgdGhpbmcgd29uJ3QgZ2l2ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVz
LiBJZiBpdCBkaWQsIHdlJ2QKICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsg
dG8gZG8gaGVyZS4KICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2Rl
LCBzdGF0dXNbaV0uY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBz
dGF0dXNbaV0ub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVz
dWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNS
ZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSwgbV9ncmFwaC5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC0xODc0LDcgKzE4NjQsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNT
RVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3Vs
ZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0
ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgIApAQCAtMTg4MiwxMiArMTg3MSwyMyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRo
YXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQg
bWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCiAgICAgICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBj
dXJyZW50bHkgZG9uJ3QuCiAgICAgICAgIAotICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwor
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxs
VXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXI6CisgICAgICAgICAgICBhZG1pdHRlZFR5
cGVzID0gU3BlY090aGVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7
CisgICAgICAgIAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCwgYWRtaXR0ZWRUeXBlcyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMDc4LDEzICsyMDc4LDE5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG5vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50
cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBkYXRhLm9mZnNl
dCk7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUs
ICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMgdGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3Bl
cnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5nIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8g
cmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdl
IG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAodXN1YWxseQorICAgICAgICAvLyBieSBzb21l
dGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkgQ1NFIGZvciBleGFtcGxlKSB0aGF0IG9ic2N1
cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3
aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSds
bCBmb3JnZXQgd2hhdCB0aGUgcHJvdmVuCisgICAgICAgIC8vIHR5cGUgc2hvdWxkIGhhdmUgYmVl
biwgZXZlbiB0aG91Z2ggd2Ugd291bGQgaGF2ZSBrbm93biBpdCBhdCBwYXJzZSB0aW1lLiBJdCBt
aWdodCBiZSB3b3J0aHdoaWxlCisgICAgICAgIC8vIHRvIHB1dCBhbiBpbmZlcnJlZCB0eXBlIGlu
dG8gdGhlIFN0b3JhZ2VBY2Nlc3NEYXRhLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0g
bV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOworCisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgaWYgKHZhbHVl
Lm1fdmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEyMywxOCArMjEyOSwyOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAo
c2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJh
c2VTZXQubWVyZ2Uoc2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGdldENhc2Uu
bWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewotICAgICAg
ICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBzd2l0Y2ggKGdldENhc2UubWV0aG9kKCkua2luZCgpKSB7CisgICAg
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDogeworICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKKyAgICAgICAgICAgICAgICB0aGlzUmVzdWx0
LnNldCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgICAgICAgICAg
KmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdl
KHRoaXNSZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAg
ICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAg
ICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCi0gICAgICAgICAgICAgICAgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICByZXN1bHQubWVyZ2Uo
dGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZldE1ldGhvZDo6TG9hZDog
eworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZXQsIGdldENhc2UubWV0aG9kKCkub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUo
bV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKQEAgLTI2MDYsOSArMjYyMyw5IEBA
IHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXIoCi0gICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKIHsK
LSAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCkgPT0gRmlsdHJhdGlvbk9LKQorICAg
IGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0LCBhZG1pdHRlZFR5cGVzKSA9PSBGaWx0cmF0
aW9uT0spCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgbV9zdGF0ZS5zZXRJc1Zh
bGlkKGZhbHNlKTsKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTg5MTYx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw1OSBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldFR5
cGUoR3JhcGgmIGdyYXBoCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCit2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBzZXRUeXBlKFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhl
cjoKKyAgICAgICAgc2V0VHlwZShTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBzZXRUeXBlKFNwZWNJbnQzMik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6RG91YmxlOgorICAgICAgICBzZXRU
eXBlKFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBzZXRUeXBlKFNwZWNCeXRlY29kZU51bWJlcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBz
ZXQoZ3JhcGgsIGdyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICBtZXJnZShTcGVj
T3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoK
KyAgICAgICAgc2V0VHlwZShncmFwaCwgU3BlY09iamVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc2V0VHlwZShncmFw
aCwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBtYWtlSGVhcFRvcCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXQoCisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3Rh
dGUpCit7CisgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAoY2xvYmJlclN0YXRl
ID09IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7
Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBo
JiBncmFwaCwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2RlKQogewogICAgIGlm
IChyZXByZXNlbnRhdGlvbiA9PSBOb2RlUmVzdWx0RG91YmxlKSB7CkBAIC0xODksOCArMjQyLDEx
IEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKICAgICByZXR1cm4g
b2xkTWUgIT0gKnRoaXM7CiB9CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK0ZpbHRyYXRpb25S
ZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgU3Ry
dWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKIHsKKyAgICBB
U1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAoaXNDbGVh
cigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcgKzI1NCw3
IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAvLyBoYXZp
bmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgIAotICAg
IG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90eXBl
ICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlwZXM7CiAg
ICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwogICAg
IG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJE
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgpA
QCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1fdmFs
dWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9Ci0gICAg
CisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYp
OworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwg
U3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0
aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxwdHIpOwog
ICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwogICAgIApA
QCAtMjgwLDggKzI4NCwxNCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAg
ICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KKworICAgIC8vIEZpbHRl
cnMgdGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBJZiB0aGUgYWRtaXR0
ZWRUeXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCisgICAgLy8gaW1wbGljaXRseSBm
aWx0ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3aGljaCBh
cmUgdXN1YWxseSBhIHN1YnNldCBvZgorICAgIC8vIFNwZWNDZWxsLiBIZW5jZSwgYWZ0ZXIgdGhp
cyBjYWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgbm9uLWNlbGwgbWVtYmVy
cy4gQnV0LCB5b3UgY2FuCisgICAgLy8gdXNlIGFkbWl0dGVkVHlwZXMgdG8gcHJlc2VydmUgc29t
ZSBub24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0IGl0J3Mgd3JvbmcgZm9yIGFkbWl0dGVkVHlwZXMg
dG8gb3ZlcmxhcAorICAgIC8vIHdpdGggU3BlY0NlbGwuCisgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRl
ZFR5cGVzID0gU3BlY05vbmUpOwogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdy
YXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJB
cnJheU1vZGVzKEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1
bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJv
emVuVmFsdWUmIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgREZHRGVzaXJl
ZEluZmVycmVkVHlwZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkluZmVy
cmVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERGRydzIGV4cGVjdGF0aW9u
IGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3ZSB3YW50IGl0IHRvIGhh
dmUgYSBsaXZlCisvLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0IHRoaXMgb2JqZWN0IGhh
cyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFzcyBEZXNpcmVkSW5mZXJy
ZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKCkKKyAgICAgICAgOiBt
X29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVzaXJlZEluZmVycmVk
VHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBleHBlY3RlZCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9leHBl
Y3RlZChleHBlY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgRGVzaXJlZEluZmVycmVkVHlwZShX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0
cikKKyAgICAgICAgLCBtX2V4cGVjdGVkKFRvcCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQ7
IH0KKworICAgIEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7
IH0KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVy
biBtX2V4cGVjdGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0ZWQpOworICAgIH0KKwor
ICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0CisgICAgeworICAgICAg
ICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAg
ICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2Jq
ZWN0ICYmIG1fZXhwZWN0ZWQgPT0gVG9wOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxJbmZlcnJlZFR5cGUqPjo6
aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVkLmhhc2goKSAqIDc7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChtX2V4cGVjdGVkLCBjb250
ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlcihtX29iamVjdCkpOworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4
dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUqIG1f
b2JqZWN0OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX2V4cGVjdGVkOworfTsKKwor
c3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBhLCBjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geworICAgIHR5cGVkZWYgSlNDOjpE
Rkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEZXNpcmVkSW5mZXJyZWRU
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw2ICs2NSwxMSBAQCB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6CiAg
ICAgfQogfQogCit2b2lkIEluZmVycmVkVHlwZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBDb21tb25EYXRhJiBjb21tb24p
Cit7CisgICAga2V5LmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQor
CiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogRGVzaXJlZFdh
dGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiAKQEAgLTkzLDYgKzk4LDExIEBA
IHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QKICAgICBtX2FkYXB0aXZl
U3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OmFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCit7CisgICAgbV9p
bmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERlc2lyZWRXYXRjaHBvaW50
czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUt
PmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMDgsNiArMTE4LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hw
b2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNv
ZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJs
b2NrLCBjb21tb25EYXRhKTsKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQo
Y29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2luZmVycmVkVHlwZXMucmVhbGx5QWRkKGNv
ZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVT
dGlsbFZhbGlkKCkgY29uc3QKQEAgLTExNiw3ICsxMjcsOCBAQCBib29sIERlc2lyZWRXYXRjaHBv
aW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZh
bGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKICAgICAg
ICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9hZGFwdGl2
ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAmJiBtX2FkYXB0aXZlU3Ry
dWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9pbmZlcnJlZFR5cGVzLmFy
ZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CkBAIC0xMjcs
NiArMTM5LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUAogICAg
IG91dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRW
YWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6
ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnBy
aW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0
aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIElu
ZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFR5cGVzLCBjb250ZXh0KSwgIlxu
Iik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg5
MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSW5m
ZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKQEAg
LTkxLDYgKzkyLDE4IEBAIHN0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG8K
ICAgICB9CiB9OwogCitzdHJ1Y3QgSW5mZXJyZWRUeXBlQWRhcHRvciB7CisgICAgc3RhdGljIHZv
aWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmLCBDb21tb25EYXRh
Jik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IERlc2lyZWRJbmZl
cnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5LmlzU3RpbGxWYWxpZCgp
OworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgRHVtcENvbnRleHQqIGNvbnRleHQpCisg
ICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGtleSwgY29udGV4dCkpOworICAgIH0K
K307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBBZGFw
dG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMTU5LDYgKzE3
MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBj
YWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9l
cwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9v
a2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mKTsKKworICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlz
IGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVycmVkVHlwZUZvcigpLCB3aGljaCBkb2VzCisgICAg
Ly8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwog
ICAgIApAQCAtMTg2LDYgKzIwMywxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CiAgICAgfQorICAgIGJvb2wg
aXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNXYXRjaGVkKGtleSk7CisgICAgfQogCiAgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTE5Niw2ICsyMTcsNyBAQCBwcml2YXRl
OgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVk
VmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
cj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPERlc2ly
ZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlwZUFkYXB0b3I+IG1faW5mZXJyZWRUeXBlczsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg3LDYgKzg4Nyw1MCBAQCBi
b29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAgcmV0dXJuIG1fc2Fm
ZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKIH0KIAorSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVy
dHlUeXBlS2V5JiBrZXkpCit7CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtleS5zdHJ1Y3R1cmUo
KSk7CisgICAgCisgICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmdldChrZXkpOworICAg
IGlmIChpdGVyICE9IG1faW5mZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXIt
PnZhbHVlOworCisgICAgSW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5LnN0cnVjdHVyZSgp
LT5pbmZlcnJlZFR5cGVGb3JPZmZzZXQoa2V5Lm9mZnNldCgpKTsKKyAgICBpZiAoIXR5cGVPYmpl
Y3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9w
KTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKworICAgIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVzY3JpcHRvciA9IHR5cGVPYmplY3QtPmRlc2NyaXB0
b3IoKTsKKyAgICBpZiAoIXR5cGVEZXNjcmlwdG9yLmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAg
IG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJl
dHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZlcnJlZFR5cGVz
LmFkZChrZXksIHR5cGVEZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5h
ZGRMYXppbHkodHlwZU9iamVjdCk7CisgICAgaWYgKHR5cGVEZXNjcmlwdG9yLnN0cnVjdHVyZSgp
KQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlRGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7
CisKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhpcyBkZXNp
cmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkKKyAgICAv
LyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9wbGFuLndh
dGNocG9pbnRzLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3QsIHR5cGVE
ZXNjcmlwdG9yKSk7CisKKyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKK2Jvb2wgR3Jh
cGg6OndhdGNoRGVzaXJlZFR5cGUoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorewor
ICAgIGlmICgha2V5LmlzU3RpbGxWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0ga2V5LmV4cGVjdGVkKCkuc3RydWN0dXJlKCkpCisgICAg
ICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV9wbGFuLndhdGNocG9pbnRz
LmFkZExhemlseShrZXkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVu
ZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTA2MSw3ICsxMTA1LDcgQEAg
SlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwogSlNWYWx1ZSBHcmFwaDo6
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAg
IGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAg
IGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBq
dXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xkIHRoZSBw
cm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTIwLDM0IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENv
bnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNl
Lm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9CiAKK0Fic3RyYWN0VmFsdWUg
R3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2Ji
ZXJTdGF0ZSkKK3sKKyAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICBiYXNlLmZvckVhY2go
CisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXQoKnRoaXMsIGluZmVycmVkVHlw
ZUZvcihzdHJ1Y3R1cmUsIG9mZnNldCkpOworICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHZhbHVl
KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJhY3RWYWx1ZSBH
cmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3RyYWN0VmFsdWUm
IGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2Ji
ZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVy
dHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNG
aW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShiYXNlLm1f
c3RydWN0dXJlLnNldCgpLCBvZmZzZXQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1cm4gQWJz
dHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFu
dENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAgICAgLy8g
VGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdl
dEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyMSBAQCBwdWJsaWM6
CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVu
IG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21w
dXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25k
aXRpb24oKS4KICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlP
ZmZzZXQpOworCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxl
IHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KKyAg
ICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5
VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVj
dHVyZSwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVl
Rm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgUHJvcGVydHlP
ZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CisKKyAgICAvLyBUaGlzIHVzZXMgZWl0aGVy
IGNvbnN0YW50IHByb3BlcnR5IGluZmVyZW5jZSBvciBwcm9wZXJ0eSB0eXBlIGluZmVyZW5jZSB0
byBkZXJpdmUgYSBnb29kIGFic3RyYWN0CisgICAgLy8gdmFsdWUgZm9yIHNvbWUgcHJvcGVydHkg
YWNjZXNzZWQgd2l0aCB0aGUgZ2l2ZW4gYWJzdHJhY3QgdmFsdWUgYmFzZS4KKyAgICBBYnN0cmFj
dFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgQWJzdHJhY3RW
YWx1ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CiAgICAg
CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAg
IEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKQEAg
LTg1Niw2ICs4NzEsNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVu
aXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAg
SGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+IG1fYnl0
ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFByb3BlcnR5T2Zm
c2V0Pj4gbV9zYWZlVG9Mb2FkOworICAgIEhhc2hNYXA8UHJvcGVydHlUeXBlS2V5LCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKICAgICBEb21pbmF0b3JzIG1fZG9t
aW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBO
YXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Js
b2NrOwogc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMg
dG8ga25vdyB0aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2Ugd2UgbmVlZCB0byByZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBG
b3IgZ2V0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9y
Z2V0IHdoYXQgdHlwZSBpcworICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0
YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBl
S2V5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bl
cnR5VHlwZUtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlU
eXBlS2V5X2gKKyNkZWZpbmUgREZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3Bl
cnR5J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFByb3BlcnR5T2Zmc2V0
LgorCitjbGFzcyBQcm9wZXJ0eVR5cGVLZXkgeworcHVibGljOgorICAgIFByb3BlcnR5VHlwZUtl
eSgpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX29mZnNldChp
bnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICAgICAgOiBtX3N0cnVj
dHVyZShzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9
CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQor
ICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9m
ZnNldCAtIDEpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSAmJiBtX29mZnNldCAhPSBpbnZhbGlkT2Zmc2V0OyB9
CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJl
OyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0
dXJlCisgICAgICAgICAgICAmJiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldDsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8
U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpICsgbV9vZmZzZXQ7CisgICAgfQorCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIW1fb2JqZWN0ICYmIG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQgLSAxOworICAgIH0KKwor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4
dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwgbV9vZmZzZXQpOworICAgIH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29u
dGV4dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJ1Y3R1cmUqIG1f
c3RydWN0dXJlOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworc3RydWN0IFBy
b3BlcnR5VHlwZUtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3Bl
cnR5VHlwZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5
cGVLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVD
bGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBj
b25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0
eVR5cGVLZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVz
ZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgog
ICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAg
ICAgY2FzZSBGaW5hbE9iamVjdFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIyOSw2ICs1MjI5LDgwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2Yo
Tm9kZSoKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQ
UiwgR1BSUmVnIHRlbXBHUFIpCit7CisgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNp
emUoKSk7CisgICAgCisgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgp
WzBdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFy
eT4gc3RydWN0dXJlOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSOworICAgICAgICAKKyAg
ICAgICAgaWYgKHRlbXBHUFIgPT0gSW52YWxpZEdQUikgeworICAgICAgICAgICAgc3RydWN0dXJl
ID0gc3RkOjptYWtlX3VuaXF1ZTxHUFJUZW1wb3Jhcnk+KHRoaXMpOworICAgICAgICAgICAgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIgPSB0ZW1wR1BSOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgZG9uZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+
c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXIoSklUQ29tcGlsZXI6
OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRD
YWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsK
KyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAg
c3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5j
aElmQ2VsbCh2YWx1ZVJlZ3MpOworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IHZhbHVlUmVncywgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5s
aW5rKCZtX2ppdCk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIG5vUmVzdWx0KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVm
YXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtp
bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5v
ZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsK
QEAgLTU2MzMsNiArNTcwNywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxs
KEVkZ2UgCiAgICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0K
IAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQor
eworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBl
ZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRo
aXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7
CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRn
ZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIo
b3BlcmFuZC5qc1ZhbHVlUmVncygpLCB0ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOwor
fQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewog
ICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTEzLDYgKzYw
MDMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2Fz
ZSBDZWxsVXNlOgogICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsK
KyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihl
ZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODkxNjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMjcsNiArMjIyNyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVj
dE9yTnVsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlVHlwZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVy
ZShOb2RlKiwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBp
bGVDaGVja1N0cnVjdHVyZShOb2RlKik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJl
Zyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpAQCAtMjM4Niw2ICsyMzg4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVP
YmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4
OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9Ci0gICAgCisKICAgICAvLyBJbiBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkg
d2FudCB0byBkbyBpcyB2ZXJpZnkgd2hldGhlciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQs
IGFuZAogICAgIC8vIGlmIG5vdCwgZW51bWVyYXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNl
IHRoaXMgb25seSBpbiBjYXNlcyB3aGVyZSB0aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBt
ZWFuaW5nZnVsbHkgc3BlY2lhbCwgbGlrZSBmb3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAy
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gbV9zZXQub25seVN0cnVjdHVyZSgpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNo
KGZ1bmN0b3IpOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZp
c2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnBy
aW50KCJLbm93bkNlbGwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJV
c2U6CisgICAgICAgIG91dC5wcmludCgiQ2VsbE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2
aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93
bkJvb2xlYW5Vc2UsCiAgICAgQ2VsbFVzZSwKICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9y
T3RoZXJVc2UsCiAgICAgT2JqZWN0VXNlLAogICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2Jq
ZWN0VXNlLApAQCAtMTA4LDYgKzEwOSw4IEBAIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmls
dGVyRm9yKFVzZUsKICAgICBjYXNlIENlbGxVc2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAg
ICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAg
ICByZXR1cm4gU3BlY0NlbGwgfCBTcGVjT3RoZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAg
ICAgIHJldHVybiBTcGVjT2JqZWN0OwogICAgIGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
ODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxNyw2ICs0MTcsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6
CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25v
d25DZWxsVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVz
ZToKICAgICAgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjUsMjEgKzIwMjUsNTYgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUg
Y2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0
S2luZCBleGl0S2luZDsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1
Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVj
a1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAg
ZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0
cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBj
ZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9u
IikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwg
dW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNo
ZWNrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAg
ICBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0g
KFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFr
U3RydWN0dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhq
c1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhl
ciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlQ2hlY2tDZWxsKCkKQEAgLTc1MDgsNiArNzU0Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQ2VsbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
S25vd25DZWxsVXNlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlw
ZUNoZWNrKGVkZ2UpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzU4OCw2ICs3NjI2LDIyIEBA
IHByaXZhdGU6CiAgICAgICAgIGxvd0NlbGwoZWRnZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzTm90Q2VsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3Vs
YXRlIENlbGxPck90aGVyIG5vdCBjZWxsIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBjb250
aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaXNOb3RDZWxsKSk7CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05vdENlbGws
IGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVN
YWNoaW5lSW50KEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhlZGdlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiAr
NTUsNzUgQEAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEFzc2VtYgogICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCitBc3NlbWJseUhlbHBlcnM6Okp1bXBM
aXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RUeXBlKAorICAgIEpTVmFsdWVSZWdzIHJl
Z3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCit7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7CisKKyAgICBz
d2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRv
bToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChqdW1wKCkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aElmTm90Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90
T3RoZXIocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJl
Z3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6RG91YmxlOgor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmSW50MzIocmVncykpOworICAgICAgICByZXN1
bHQuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aElmTm90TnVtYmVyKHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6U3RyaW5nOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdz
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVn
cykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShyZWdzLnBheWxvYWRH
UFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICBK
dW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aFN0cnVjdHVyZShyZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOwor
ICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVn
cy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdz
LCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykp
OworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQ
UigpKSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4oRlBS
UmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hEb3Vi
bGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYzLDYg
KzU2MywxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50
YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgog
ICAgIH0KKworICAgIEp1bXBMaXN0IGJyYW5jaElmTm90VHlwZShKU1ZhbHVlUmVncyByZWdzLCBH
UFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25k
aXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOworI2Vs
c2UKKyAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICBzdGF0aWMg
QWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9mZnNldCkKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4OTE2MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw4ICs0MDQs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1h
eUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIAotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiwgVCBsZWZ0SGFuZFNp
ZGUsIFN0cnVjdHVyZSopOwotCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgYm9vbCBn
ZXRPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQoaW50IG9wMSwgaW50IG9wMiwgaW50JiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkocmV2aXNpb24gMTg5MTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNTksMjYgKzEyNTksNiBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0VGFnQXNCb29sSW1tCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLUpJVDo6SnVtcCBKSVQ6OmJyYW5jaFN0
cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQotewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmRpdGlvbiwgbGVmdEhhbmRTaWRlLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlLT5p
ZCgpKSk7Ci0jZWxzZQotICAgIHJldHVybiBicmFuY2hQdHIoY29uZGl0aW9uLCBsZWZ0SGFuZFNp
ZGUsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0jZW5kaWYKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1NYWNyb0Fzc2VtYmxlcjo6SnVtcCBicmFuY2hTdHJ1Y3R1cmUoTWFjcm9Bc3Nl
bWJsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
LCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICByZXR1cm4gaml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgbGVmdEhhbmRTaWRlLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0cnVjdHVyZS0+aWQoKSkpOwotI2Vsc2UKLSAg
ICByZXR1cm4gaml0LmJyYW5jaFB0cihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0jZW5kaWYKLX0KLQogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBD
bGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZSkgfTsKKworSW5mZXJyZWRUeXBlKiBJbmZl
cnJlZFR5cGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJl
ZFR5cGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlw
ZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBl
KCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVk
VHlwZSo+KGNlbGwpOworCisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAg
ICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihpbmZlcnJlZFR5cGUtPm1fc3Ry
dWN0dXJlLmdldCgpKTsKK30KKworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvcjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUu
aXNCb29sZWFuKCkpCisgICAgICAgIHJldHVybiBCb29sZWFuOworICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgp
KQorICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAg
ICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmlz
U3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAgICBpZiAoY2VsbC0+
aXNPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBE
ZXNjcmlwdG9yKE9iamVjdFdpdGhTdHJ1Y3R1cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRvcDsK
K30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0
b3ImIG90aGVyKQoreworICAgIGlmICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0
aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2Fz
ZSBTdHJpbmc6CisgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0Ogor
ICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgIGNhc2UgTnVtYmVyOgor
ICAgICAgICAgICAgbV9raW5kID0gTnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAg
ICAgICBtX2tpbmQgPSBOdW1iZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIGNhc2UgTnVtYmVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewor
ICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgKnRoaXMgPSBPYmpl
Y3Q7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAg
ICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5k
KSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIGlmICht
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9
IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhp
cyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAg
Y2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoK
KyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAg
ICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBP
YmplY3Q7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOgorICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7
CisgICAgRGVzY3JpcHRvciBtZXJnZWQgPSAqdGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIp
OworICAgIHJldHVybiAqdGhpcyA9PSBtZXJnZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVj
dHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29u
dGV4dCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30K
KworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0u
aW5mZXJyZWRUeXBlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFy
V2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30K
KworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBl
Y3RlZC5raW5kKCkgPT0gVG9wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9PSBleHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5
cGU6OmlzU3RpbGxWYWxpZChjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBpc1N0aWxsVmFsaWQo
bG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRv
cCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChs
b2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIs
IGRlc2NyaXB0b3IoKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNs
b3coY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgRGVzY3JpcHRvciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAg
RGVzY3JpcHRvciBvdGhlclR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAg
ICBteVR5cGUubWVyZ2Uob3RoZXJUeXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tl
cikgIT0gbXlUeXBlKTsgLy8gVGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24g
dGhlIHNsb3cgcGF0aC4KKworICAgIHNldChsb2NrZXIsIHZtLCBteVR5cGUpOworfQorCit2b2lk
IEluZmVycmVkVHlwZTo6bWFrZVRvcChWTSYgdm0pCit7CisgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2VyLCB2bSwgVG9wKTsKK30KKwordm9pZCBJ
bmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2
bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQoreworICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3
cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJh
cnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAorICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9l
cywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNl
ZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRo
ZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQorICAg
IC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsK
KyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcg
dGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZGVz
Y3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2
aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihs
b2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50
IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAg
ICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgp
IHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKworICAgIC8vIFdlIGFyZSBjaGFuZ2lu
ZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywgdGhl
eSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCisgICAgLy8gYW55b25lIGlzIHdhdGNoaW5nLCB3
ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9m
IHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVhcldh
dGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwg
c2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgorICAgICAgICBB
U1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7CisKKyAgICAg
ICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNvbWUgY29t
cGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhpcyB0eXBlIGFuZAorICAgICAgICAvLyB0
aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgY3Jhenks
IGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5ncyBmb3IKKyAgICAgICAgLy8gaXQuCisg
ICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAgICAgICAgbV93YXRjaHBvaW50U2V0LmZp
cmVBbGwoIkluZmVycmVkIHR5cGUgY2hhbmdlZCIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0
aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4K
KyAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIG1fc3RydWN0dXJl
ID0gbnVsbHB0cjsKKworICAgIC8vIEFkZCBhIG5ldyBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3Qg
aWYgd2UgbmVlZCBvbmUgbm93LgorICAgIGlmIChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7
CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFn
cmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJlLgorICAgICAgICAgICAgQVNTRVJU
KG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0
Y2hwb2ludChtX3N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBG
aW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KKyAgICBtX2tpbmQgPSBuZXdEZXNjcmlw
dG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2VydCB0aGF0IHdlIGRpZCB0aGluZ3MuCisgICAgQVNT
RVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAo
dGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX3BhcmVudC0+
bV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9y
KGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRvci5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAg
ICBzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBl
OjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJl
bnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwg
bV9zdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikK
K3sKKyAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAg
IFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fcGFyZW50KS0+dm0oKTsKKworICAgIEFTU0VSVChIZWFw
Ojppc01hcmtlZChtX3BhcmVudCkpOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9z
dHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVk
VHlwZTo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpCb3R0b206CisgICAgICAgIG91dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50
KCJCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3Ro
ZXI6CisgICAgICAgIG91dC5wcmludCgiT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkRvdWJsZToKKyAgICAgICAgb3V0
LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpOdW1iZXI6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBvdXQucHJpbnQoIlN0cmlu
ZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAg
ICBvdXQucHJpbnQoIk9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAg
b3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmZkZWYgSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgSW5mZXJy
ZWRUeXBlX2gKKworI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9iamVjdCB1c2VkIGZv
ciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBvYmplY3QgcHJvcGVydGllcy4KKworY2xh
c3MgSW5mZXJyZWRUeXBlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGUqIGNyZWF0ZShWTSYp
OworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwor
CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgZW51bSBLaW5kIDogdWludDhfdCB7CisgICAgICAg
IEJvdHRvbSwKKyAgICAgICAgQm9vbGVhbiwKKyAgICAgICAgT3RoZXIsCisgICAgICAgIEludDMy
LAorICAgICAgICBEb3VibGUsCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAg
ICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBPYmplY3RPck90aGVyLAorICAgICAgICBU
b3AKKyAgICB9OworCisgICAgY2xhc3MgRGVzY3JpcHRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBEZXNjcmlwdG9yKCkKKyAgICAgICAgICAgIDogbV9raW5kKEJvdHRvbSkKKyAgICAgICAgICAg
ICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
RGVzY3JpcHRvcihLaW5kIGtpbmQsIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cikKKyAg
ICAgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVj
dHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3Ig
Zm9yVmFsdWUoSlNWYWx1ZSk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gQm90dG9tICYmICFt
X3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZDsgfQorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlOyB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVz
VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICAgICAgICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuaXNCb29sZWFuKCk7CisgICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJ
bnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAg
ICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzRG91YmxlKCk7
CisgICAgICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUu
aXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS5pc1N0cmluZygpOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmU7CisgICAgICAgICAgICBjYXNlIE9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpCisgICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAm
JiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7
CisgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAg
ICAgIGNhc2UgVG9wOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAg
ICAgICAgICAgICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0K
KworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lk
IG1lcmdlKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUo
KTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUg
Z2VuZXJhbCB0aGFuIHRoZSBvdGhlciBvbmUuCisgICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3Qg
RGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgS2luZCBtX2tpbmQ7CisgICAgICAg
IFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgfTsKKworICAgIENvbmN1cnJlbnRKSVRMb2Nr
JiBsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVj
dHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNv
bnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgICAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIH0KKyAgICAKKyAgICBLaW5k
IGtpbmQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBk
ZXNjcmlwdG9yKCkua2luZCgpOyB9CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKCkuc3Ry
dWN0dXJlKCk7IH0KKworICAgIGJvb2wgaXNSZWxldmFudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZCAhPSBUb3A7IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlz
IHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QgcmVsZXZhbnQgaWYgaXQn
cyBUb3AuCisgICAgQUxXQVlTX0lOTElORSBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiB2bSwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgICAgIGlmICghZGVzY3JpcHRvcihsb2NrZXIpLmluY2x1ZGVzVmFsdWUobG9j
a2VyLCB2YWx1ZSkpCisgICAgICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3cobG9ja2VyLCB2bSwg
dmFsdWUpOworICAgICAgICByZXR1cm4ga2luZChsb2NrZXIpICE9IFRvcDsKKyAgICB9CisKKyAg
ICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5cGUgaXJyZWxldmFudC4KKyAgICB2b2lkIG1h
a2VUb3AoVk0mKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBjdXJyZW50bHkgbWFrZXMg
c2Vuc2UgdG8gd2F0Y2ggdGhpcyBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgZGVzY3JpcHRvci4gTm90
ZSB0aGF0CisgICAgLy8gdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFRvcC4KKyAg
ICBib29sIGNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3Qg
RGVzY3JpcHRvciYpOworICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYpOworICAg
IAorICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2Nr
ZXIsIFdhdGNocG9pbnQqKTsKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOwor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW5m
ZXJyZWRUeXBlKFZNJik7CisgICAgfkluZmVycmVkVHlwZSgpOworCisgICAgdm9pZCB3aWxsU3Rv
cmVWYWx1ZVNsb3coY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgSlNWYWx1ZSk7Cisg
ICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgRGVzY3JpcHRvcik7
CisgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgIG11dGFibGUgQ29uY3VycmVudEpJ
VExvY2sgbV9sb2NrOworICAgIAorICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CisKKyAgICBj
bGFzcyBJbmZlcnJlZFN0cnVjdHVyZSA6IHB1YmxpYyBXYXRjaHBvaW50LCBwdWJsaWMgVW5jb25k
aXRpb25hbEZpbmFsaXplciB7CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVy
ZShJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7CisKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfTsKKworICAg
IHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYp
IG92ZXJyaWRlOworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJp
ZGU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBJbmZlcnJlZFR5cGUqIG1fcGFyZW50OworICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAg
c3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKworICAgIC8v
IE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNh
dXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCisgICAgLy8gcHJvZml0YWJsZSB0
byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFu
ZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKKyAgICAvLyB0aHJlYWQuIFRoZSBERkcgd2ls
bCB1c2UgdGhlIEluZmVycmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVzLgorICAg
IElubGluZVdhdGNocG9pbnRTZXQgbV93YXRjaHBvaW50U2V0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkluZmVycmVkVHlwZTo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRU
eXBlVGFibGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19pbmZvID0geyAiSW5mZXJy
ZWRUeXBlVGFibGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZVRhYmxl
KSB9OworCitJbmZlcnJlZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZShWTSYg
dm0pCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEluZmVycmVkVHlwZVRhYmxlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlVGFibGUo
dm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQorewor
ICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IHN0YXRpY19jYXN0PElu
ZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlVGFibGUtPkluZmVycmVk
VHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJl
ZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVy
cmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGVUYWJs
ZSo+KGNlbGwpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAKKyAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+IHRvUmVtb3ZlOworICAgIAorICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX3RhYmxlKSB7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXNSZWxl
dmFudCgpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJ5LnZhbHVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgfQor
CisgICAgZm9yIChQcm9wZXJ0eU9mZnNldCBvZmZzZXQgOiB0b1JlbW92ZSkKKyAgICAgICAgbV90
YWJsZS5yZW1vdmUob2Zmc2V0KTsKK30KKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlw
ZVRhYmxlOjpjbG9uZShWTSYgdm0pCit7CisgICAgVmVjdG9yPFRhYmxlVHlwZTo6S2V5VmFsdWVQ
YWlyVHlwZSwgOD4gdG9BZGQ7CisgICAgCisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90YWJsZSkg
eworICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAg
ICAgICAgdG9BZGQuYXBwZW5kKGVudHJ5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEluZmVy
cmVkVHlwZVRhYmxlKiByZXN1bHQgPSBjcmVhdGUodm0pOworCisgICAgZm9yIChhdXRvJiBlbnRy
eSA6IHRvQWRkKQorICAgICAgICByZXN1bHQtPm1fdGFibGUuYWRkKGVudHJ5LmtleSwgV3JpdGVC
YXJyaWVyPEluZmVycmVkVHlwZT4odm0sIHJlc3VsdCwgZW50cnkuZ2V0KCkpKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG1fdGFibGUuZ2V0KG9mZnNldCk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gVGFrZSB0aGlz
IG9wcG9ydHVuaXR5IHRvIHBydW5lIGludmFsaWRhdGVkIHR5cGVzLgorICAgIGlmICghcmVzdWx0
LT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAgbV90YWJsZS5yZW1vdmUob2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW5m
ZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBn
ZXQobG9ja2VyLCBvZmZzZXQpOworfQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3Rv
cmVWYWx1ZShWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIEluZmVycmVkVHlw
ZSogdHlwZSA9IG1fdGFibGUuZ2V0KG9mZnNldCk7CisgICAgaWYgKCF0eXBlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodHlwZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX3RhYmxlLnJlbW92ZShvZmZzZXQpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChWTSYg
dm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUbG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIEluZmVycmVkVHlwZSogdHlwZSA9IG1fdGFibGUudGFrZShvZmZz
ZXQpOworICAgIGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHlwZS0+bWFrZVRv
cCgpOworfQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVJbmZlcnJlZFR5cGVGb3JO
ZXdQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGUgPSBJbmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7Cisg
ICAgaWYgKCF0eXBlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBGaXJlIHRoZSBiYXJyaWVyIGJlZm9yZSBncmFiYmluZyB0aGUgbG9j
ay4KKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPiB0eXBlQmFycmllcih2bSwgdGhpcywg
dHlwZSk7CisgICAgCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fdGFibGUuYWRkKG9mZnNldCwgdHlwZUJhcnJpZXIpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlVGFi
bGVfaAorCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21l
IHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUg
U3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8gbWFu
YWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRo
aW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMg
aXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCisv
LyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFy
ZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFzIGJl
aW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuCisKK2NsYXNzIEluZmVycmVkVHlw
ZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7CisK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAg
ICBERUNMQVJFX0lORk87CisKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogY2xvbmUoVk0mKTsKKwor
ICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisgICAg
SW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zm
c2V0KTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGls
bCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90CisgICAgLy8gcmVsZXZhbnQgaWYg
aXQncyBUb3AuIE5vdGUgdGhhdCB0aGlzIHRhYmxlIHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3Ag
ZW50cmllcy4KKyAgICBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiwgUHJvcGVydHlPZmZzZXQsIEpT
VmFsdWUpOworCisgICAgLy8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4g
VXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAg
IHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5T2Zmc2V0KTsKKworICAgIC8vIFRoaXMgY3JlYXRl
cyBhIG5ldyBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkuIE5vdGUgdGhhdCB0aGlzIG1l
dGhvZCBpcyBuZWVkZWQgYmVjYXVzZQorICAgIC8vIHdpbGxTdG9yZVZhbHVlKCkgYXNzdW1lcyB0
aGF0IGlmIHRoZXJlIGlzbid0IGFuIEluZmVycmVkVHlwZSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0
eSwgdGhlbiBpdCdzCisgICAgLy8gYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGNvbmNsdWRlZCB0aGF0
IHRoZSBwcm9wZXJ0eSBzaG91bGQgbm90IGhhdmUgYSB0eXBlLgorICAgIGJvb2wgY3JlYXRlSW5m
ZXJyZWRUeXBlRm9yTmV3UHJvcGVydHkoVk0mLCBQcm9wZXJ0eU9mZnNldCwgSlNWYWx1ZSk7CisK
K3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlVGFibGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBl
VGFibGUoKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgV3JpdGVCYXJy
aWVyPEluZmVycmVkVHlwZT4sIFdURjo6SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UHJvcGVydHlPZmZzZXQ+PiBUYWJsZVR5cGU7Cisg
ICAgCisgICAgVGFibGVUeXBlIG1fdGFibGU7CisgICAgQ29uY3VycmVudEpJVExvY2sgbV9sb2Nr
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJs
ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE0LDYgKzEyMTQsOCBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRo
aXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsK
KyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAgICAg
IAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0
dHJpYnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTEy
NTMsNiArMTI1NSwxMCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkg
PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
b2Zmc2V0KSkgeworICAgICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgZG8gdHlwZSBpbmZlcmVu
Y2UuCisgICAgICAgIGlmIChzbG90LmNvbnRleHQoKSA9PSBQdXRCeUlkKQorICAgICAgICAgICAg
c3RydWN0dXJlLT5jcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eSh2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSk7CisgICAgICAgIAogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAg
IGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CkBAIC0xMjY5LDEyICsxMjc1LDIyIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bnRlcm5hbCgKICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRl
cyk7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7
CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9
PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5
KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7CisgICAg
ICAgICAgICBib29sIGlzU3RpbGxWYWxpZDsKKyAgICAgICAgICAgIGlmIChzbG90LmNvbnRleHQo
KSA9PSBQdXRCeUlkKQorICAgICAgICAgICAgICAgIGlzU3RpbGxWYWxpZCA9IHN0cnVjdHVyZS0+
d2lsbFN0b3JlVmFsdWUodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGlzU3RpbGxWYWxpZCA9IHN0cnVjdHVyZS0+bWFrZVRvcCh2bSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghaXNTdGlsbFZhbGlkKSkKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPnVwZGF0ZUhhc0luZmVycmVkVHlwZUZvclByb3BlcnR5KHZtLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICB9CiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0
aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCkBA
IC0xMjk0LDYgKzEzMTAsOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJy
ZWRXYXRjaHBvaW50RmlyZTsKICAgICAKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBp
ZiAoc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCkKKyAgICAgICAgc3RydWN0dXJlLT5jcmVhdGVJ
bmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAg
CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODkxNjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsMTEgKzM0Nywx
NSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQog
ICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwog
ICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVu
dHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5t
X29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYg
KHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fb2Zmc2V0KSkKKyAgICAg
ICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7CiAgICAgICAgIHByb3BlcnR5VGFi
bGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRN
dXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC00NjEsNiArNDY1LDE2IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRy
aWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OworICAgIGlmIChzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHByb2JhYmx5IGdldCBzb21lIHNwYWNlIHNhdmluZ3Mg
YnkgaGF2aW5nIHRyYW5zaXRpb25zIHNoYXJlIGEgdGFibGUgd2l0aCB0aGVpcgorICAgICAgICAv
LyBwcmVkZWNlc3NvcnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZmlyc3QgcHJvcGVydHkgbmFtZSB5
b3UgdXNlIHdoZW4gY3JlYXRpbmcgYW4gb2JqZWN0IGRldGVybWluZXMKKyAgICAgICAgLy8gdGhl
ICJzcGFjZSIgb2YgaW5mZXJyZWQgdHlwZXMgdGhhdCB0aGUgc3RydWN0dXJlIGxpdmVzIGluLCBh
bmQgdGhlcmVhZnRlciwgZXZlcnl0aGluZyBpcyBzaGFyZWQuCisgICAgICAgIC8vIFVuZm9ydHVu
YXRlbHksIHRoaXMgY3VycmVudGx5IHdvbid0IHdvcmssIGJlY2F1c2Ugb2YgaG93IGFkZGluZyBu
ZXcgcHJvcGVydGllcyB3b3Jrcy4gV2UgYXNzdW1lCisgICAgICAgIC8vIHRoYXQgdGhlIGluZmVy
cmVkIHR5cGUgdGFibGUgaGFkIG5ldmVyIHNlZW4gdGhlIHByb3BlcnR5IGJlZm9yZS4gV2UgY291
bGQgZml4IHRoaXMgYnkgZW5zdXJpbmcKKyAgICAgICAgLy8gdGhhdCB0aGUgSW5mZXJyZWRUeXBl
VGFibGUgZG9lc24ndCBmb3JnZXQgdGhhdCBpdCBoYWQgYW4gZW50cnkgZm9yIHR5cGUgd2hlbmV2
ZXIgdGhhdCB0eXBlIGdvZXMKKyAgICAgICAgLy8gdG8gVG9wLgorICAgICAgICB0cmFuc2l0aW9u
LT5tX2luZmVycmVkVHlwZVRhYmxlID0gc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLT5j
bG9uZSh2bSk7CisgICAgfQogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCkBAIC04MzgsNiArODUyLDY1IEBAIHZvaWQgU3RydWN0
dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJv
cGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnVwZGF0ZUluZmVycmVkVHlwZUZv
clByb3BlcnR5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpOworCisgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3ZlIGdv
dCBhIHByb3BlcnR5IHRhYmxlLgorICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Cisg
ICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsK
KworICAgIGlmICghcHJvcGVydHlUYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUHJvcGVy
dHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgp
KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoSW5mZXJyZWRU
eXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgZW50
cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT5nZXQoZW50cnktPm9mZnNldCk7CisgICAgZWxz
ZQorICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gZmFsc2U7Cit9CisKK3ZvaWQgU3Ry
dWN0dXJlOjpjcmVhdGVJbmZlcnJlZFR5cGVGb3JOZXdQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKCFpc0NvbXBp
bGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0g
aW5mbygpKTsKKworICAgIC8vIENyZWF0ZSB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSBiZWZvcmUg
ZG9pbmcgYW55dGhpbmcgZWxzZSwgc28gdGhhdCB3ZSBkb24ndCBHQyBhZnRlciB3ZSBoYXZlIGFs
cmVhZHkKKyAgICAvLyBncmFiYmVkIGEgcG9pbnRlciBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuCisg
ICAgSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsK
KyAgICBpZiAoIXRhYmxlKSB7CisgICAgICAgIHRhYmxlID0gSW5mZXJyZWRUeXBlVGFibGU6OmNy
ZWF0ZSh2bSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUJhcnJpZXIoKTsKKyAgICAgICAgbV9p
bmZlcnJlZFR5cGVUYWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKKyAgICB9CisKKyAgICAvLyBU
aGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEgcHJvcGVydHkgdGFibGUuCisgICAgUHJvcGVy
dHlUYWJsZSogcHJvcGVydHlUYWJsZTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOworCisgICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRo
aXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdpdmVuIHByb3BlcnR5LCBzbyB3ZSBtdXN0IGhh
dmUgYSBwcm9wZXJ0eSB0YWJsZQorICAgIC8vIG5vdy4KKyAgICBBU1NFUlQocHJvcGVydHlUYWJs
ZSk7CisKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChw
cm9wZXJ0eU5hbWUudWlkKCkpOworICAgIEFTU0VSVChlbnRyeSk7CisKKyAgICAvLyBTaW5jZSB0
aGlzIGlzIGEgbmV3IHByb3BlcnR5LCB3ZSBtdXN0IG5vdCBoYXZlIHNldCBoYXNJbmZlcnJlZFR5
cGUgcHJldmlvdXNseS4KKyAgICBBU1NFUlQoIWVudHJ5LT5oYXNJbmZlcnJlZFR5cGUpOworICAg
IAorICAgIGlmICghdGFibGUtPmNyZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KHZtLCBl
bnRyeS0+b2Zmc2V0LCB2YWx1ZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBzdXBlciByYXJlIGFu
ZCB3ZWlyZCwgYnV0IHdlIG5lZWQgdG8gaGFuZGxlIGl0LiBJdCdsbCBvY2N1ciBpZiB0aGUgdmFs
dWUgaGFzIGEgdHlwZSB0aGF0CisgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgdHlwZSBpbmZlcmVu
Y2UgcnVsZXMgZm9yLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW50cnktPmhhc0lu
ZmVycmVkVHlwZSA9IHRydWU7Cit9CisKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKIFBy
b3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMqIHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDE4OTE2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsMTMgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkg
ewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwogICAgIHVpbnQ4X3QgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8g
VGhpcyBjYWNoZXMgd2hldGhlciBvciBub3QgYSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlw
ZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVj
ayBpbiBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50
cnkoKQogICAgICAgICA6IGtleShudWxscHRyKQogICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zm
c2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoMCkKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUo
ZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTkzLDYgKzk1LDcgQEAgc3RydWN0IFByb3Bl
cnR5TWFwRW50cnkgewogICAgICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNl
dCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgICAgICwgaGFzSW5mZXJy
ZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0g
YXR0cmlidXRlcyk7CiAgICAgfQpAQCAtMzIzLDYgKzMyNiw3IEBAIHB1YmxpYzoKIAogICAgIFBy
b3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQg
Z2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CisgICAgUHJvcGVy
dHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9v
bCYgaGFzSW5mZXJyZWRUeXBlKTsKIAogICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5h
bGlzaCBtZXRob2QuIEl0IHdpbGwgY2FsbCB5b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9s
ZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1cmUncyBsb2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUg
d2hldGhlciB0aGUgbG9jayBpcyBoZWxkIG9yIG5vdCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNDc3
LDYgKzQ4MSw1NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeSh2bSk7CiAgICAgfQogCisgICAgYm9vbCBo
YXNJbmZlcnJlZFR5cGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1faW5mZXJy
ZWRUeXBlVGFibGU7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3JP
ZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpCisgICAgICAgICAg
ICByZXR1cm4gdGFibGUtPmdldChvZmZzZXQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGlz
IHN0aWxsIHZhbGlkLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYg
dm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7Cisg
ICAgICAgIGlmIChMSUtFTFkoIXRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgYm9vbCByZXN1bHQgPSB0YWJsZS0+d2lsbFN0b3JlVmFsdWUodm0sIG9mZnNldCwgdmFs
dWUpOworICAgICAgICBpZiAodGFibGUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1faW5mZXJy
ZWRUeXBlVGFibGUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICAvLyBSZXR1cm5zIGZhbHNlIGFsd2F5cywgdG8gbWF0Y2ggdGhlIHJldHVybiB2YWx1ZSBzZW1h
bnRpY3Mgb2Ygd2lsbFN0b3JlVmFsdWUoKTogaWYgaXQgcmV0dXJucyBmYWxzZSwKKyAgICAvLyB0
aGVuIHRoZSBwcm9wZXJ0eSB0eXBlIGlzIGludmFsaWQgKHdoaWNoIGlzIGFsd2F5cykuCisgICAg
QUxXQVlTX0lOTElORSBib29sIG1ha2VUb3AoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CisgICAgeworICAgICAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlw
ZVRhYmxlLmdldCgpOworICAgICAgICBpZiAoTElLRUxZKCF0YWJsZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHRhYmxlLT5tYWtlVG9wKHZtLCBvZmZzZXQpOworICAgICAg
ICBpZiAodGFibGUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1faW5mZXJyZWRUeXBlVGFibGUu
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdXBkYXRl
SGFzSW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoVk0mLCBQcm9wZXJ0eU5hbWUpOworCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGNyZWF0ZUluZmVycmVkVHlwZUZvck5ld1Byb3BlcnR5KFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGVzZSBjb25kaXRpb25zIGNvdWxkIHByb2JhYmx5IGJlIHJlZmluZWQuCisg
ICAgICAgIGlmIChpc0RpY3Rpb25hcnkoKSB8fCB0cmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5
VG9CZUZpcmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY3JlYXRlSW5mZXJy
ZWRUeXBlRm9yTmV3UHJvcGVydHlTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICB9
CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFs
dWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNo
IGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02
MjcsNiArNjc5LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRl
cm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIHZvaWQgY3JlYXRlSW5mZXJyZWRUeXBlRm9yTmV3
UHJvcGVydHlTbG93KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKwogICAgIHN0YXRpYyBj
b25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGlu
dCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAtNjUw
LDYgKzcwNCw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2gg
cHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVy
IHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxl
VW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVk
VHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlv
bldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNl
dCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxODkx
NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnN0b3JlZFByb3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNz
SW5mbygpID09IGluZm8oKSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwot
ICAgIGlmICghcHJvcGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0K
LSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0
eU5hbWUudWlkKCkpOwotICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlk
T2Zmc2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5
cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZl
cnJlZFR5cGUpOwogfQogICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzKQogeworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5
cGUpCit7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3IEBA
IEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Cisg
ICAgaGFzSW5mZXJyZWRUeXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1cm4g
ZW50cnktPm9mZnNldDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260955</attachid>
            <date>2015-09-10 14:11:17 -0700</date>
            <delta_ts>2015-09-10 14:53:16 -0700</delta_ts>
            <desc>rebased and using a slightly more space-optimal InferredTypeTable</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114362</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk1NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NTIsNiArNzU0LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTIwLDYgKzE5
MjYsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU4Myw2ICsyNTkxLDEwIEBACiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTElu
dE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMEYxQjk0RDRERjAwNzFE
RDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2
NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUHJvcGVydHlUeXBlS2V5Lmg7IHBhdGggPSBkZmcvREZHUHJvcGVydHlUeXBlS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAv
KiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3Rh
bnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgw
MDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDMxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2NTcsOCArNDY2OSw4IEBACiAJCQkJQkMwMkU5OEIw
RTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5zdGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgz
OURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5
REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oICovLAotCQkJCUZFMUMwRkZDMUIxOTNFOTgw
MEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0Eg
LyogRXhjZXB0aW9uLmNwcCAqLywKKwkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhj
ZXB0aW9uLmggKi8sCiAJCQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1
enouY3BwICovLAogCQkJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6
LmggKi8sCiAJCQkJMTQyOUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMu
Y3BwICovLApAQCAtNDY5Miw2ICs0NzA0LDEwIEBACiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2
N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYx
NjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmNwcCAqLywKKwkJCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyog
SW5mZXJyZWRUeXBlLmggKi8sCisJCQkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmNwcCAqLywKKwkJCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuaCAqLywKIAkJCQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5m
ZXJyZWRWYWx1ZS5jcHAgKi8sCiAJCQkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAgKi8sCkBAIC00NzQyLDEwICs0NzU4LDEwIEBACiAJCQkJMEYyQjY2QkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAogCQkJCUE3
QkRBRUM0MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuY3BwICovLAogCQkJCUE3
QkRBRUM1MTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCAqLywKLQkJCQk4NkZB
OUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKLQkJCQk4NkZB
OUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJOEIwRjQy
NEIxQUJENkRFMjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5jcHAgKi8sCiAJCQkJOEIwRjQy
NEExQUJENkQyRjAwMzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5oICovLAorCQkJCTg2RkE5RThG
MTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAorCQkJCTg2RkE5RTkw
MTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5
QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1N0NGNDU3MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAv
KiBKU0NlbGwuY3BwICovLApAQCAtNTA0OSw5ICs1MDY1LDkgQEAKIAkJCQkwRkUwNTAyNDFBQTkw
OTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmggKi8sCiAJCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkw
QjM0IC8qIFZNLmNwcCAqLywKIAkJCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAq
LywKLQkJCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8sCiAJCQkJ
RkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8sCiAJCQkJRkU1
OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovLAorCQkJCUZFOTBCQjNB
MUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRUQ5NEYyQjE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwICovLAogCQkJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdB
NCAvKiBXYXRjaGRvZy5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFr
R0NNYXAuaCAqLywKQEAgLTUyMDMsNiArNTIxOSw3IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2RjAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAw
N0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAorCQkJCTBGRkM5MjEzMUI5NEU4
M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCiAJCQkJQzJDMEY3Q0Ix
N0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8sCiAJCQkJQzJD
MEY3Q0MxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovLAogCQkJ
CTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICov
LApAQCAtNTM1MCw2ICs1MzY3LDcgQEAKIAkJCQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyog
REZHUHJlUG9zdE51bWJlcmluZy5oICovLAogCQkJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAv
KiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYyQjlDRTExOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmggKi8sCisJCQkJMEZGQzkyMTUxQjk0
RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovLAogCQkJCTBGQjE3NjVFMTk2
QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVGMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKIAkJCQkwRjNBMUJGNzFBOUVDQjdEMDAw
REUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwICovLApAQCAtNTk0MCw2ICs1OTU4
LDcgQEAKIAkJCQlGRTUwNjg2NTFBRTI0NjM5MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1w
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQyQ0IyNTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1
dHMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUZFMUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBF
eGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAv
KiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUVFMEMwMDFC
NEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTI2NzhGOTExQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjA1Myw2ICs2MDcyLDcgQEAKIAkJCQkwRkJEN0U2
OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Iw
MjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAg
LyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4
ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4
NkMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApA
QCAtNjMzOCw2ICs2MzU4LDcgQEAKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRM
VW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5
QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzky
MTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFy
Z2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY1MDQsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAy
OEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJv
cGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTc0NDgsNiArNzQ3MCw3IEBACiAJCQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8q
IENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAw
MzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYzQzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0
eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYzLDYgKzc4ODYs
NyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRl
cm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3
NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCNkE3NEQxOEM2REJB
NjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4OTU3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzNiw3ICszMzYsMzkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdG91
Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBOb3Rl
IHRoYXQgZm9yIGFueSB3YXRjaHBvaW50IHRoYXQgaXMgdmlzaWJsZSBmcm9tIHRoZSBERkcsIGl0
IHdvdWxkIGJlIGluY29ycmVjdCB0byB3cml0ZSBjb2RlIGxpa2U6CisgICAgLy8KKyAgICAvLyBp
ZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAgIC8vCisg
ICAgLy8gQ29uY3VycmVudGx5IHRvIHRoaXMsIHRoZSBERkcgY291bGQgZG86CisgICAgLy8KKyAg
ICAvLyBpZiAody5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcGVyZm9ybSBvcHRpbWl6YXRp
b25zOworICAgIC8vIGlmICghdy5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcmV0cnkgY29t
cGlsYXRpb247CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgdGhlIERGRyBhbGdvcml0aG0gaXMg
d2lkZXNwcmVhZCwgYW5kIHNvdW5kLCBiZWNhdXNlIGZpcmVBbGwoKSBhbmQgaW52YWxpZGF0ZSgp
IHdpbGwgbGVhdmUKKyAgICAvLyB0aGUgd2F0Y2hwb2ludCBpbiBhICFpc1N0aWxsVmFsaWQoKSBz
dGF0ZS4gSGVuY2UsIGlmIGZpcmVBbGwoKSBvciBpbnZhbGlkYXRlKCkgaW50ZXJsZWF2ZWQgYmV0
d2VlbgorICAgIC8vIHRoZSBmaXJzdCBpc1N0aWxsVmFsaWQoKSBjaGVjayBhbmQgdGhlIHNlY29u
ZCBvbmUsIHRoZW4gaXQgd291bGQgc2ltcGx5IGNhdXNlIHRoZSBERkcgdG8gcmV0cnkKKyAgICAv
LyBjb21waWxhdGlvbiBsYXRlci4KKyAgICAvLworICAgIC8vIEJ1dCwgaWYgeW91IGNoYW5nZSBz
b21lIHBpZWNlIG9mIHN0YXRlIHRoYXQgdGhlIERGRyBtaWdodCBvcHRpbWl6ZSBmb3IsIGJ1dCBp
bnZhbGlkYXRlIHRoZQorICAgIC8vIHdhdGNocG9pbnQgYnkgZG9pbmc6CisgICAgLy8KKyAgICAv
LyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAgIC8v
CisgICAgLy8gdGhlbiB0aGUgREZHIHdvdWxkIG5ldmVyIGtub3cgdGhhdCB5b3UgaW52YWxpZGF0
ZWQgc3RhdGUgYmV0d2VlbiB0aGUgdHdvIGNoZWNrcy4KKyAgICAvLworICAgIC8vIFRoZXJlIGFy
ZSB0d28gd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlzOgorICAgIC8vCisgICAgLy8gLSBDYWxsIGZp
cmVBbGwoKSB3aXRob3V0IGEgaXNCZWluZ1dhdGNoZWQoKSBjaGVjay4gVGhlbiwgdGhlIERGRyB3
aWxsIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBoYXMKKyAgICAvLyAgIGJlZW4gaW52YWxpZGF0
ZWQgd2hlbiBpdCBkb2VzIGl0cyBzZWNvbmQgY2hlY2suCisgICAgLy8KKyAgICAvLyAtIERvIG5v
dCBleHBvc2UgdGhlIHdhdGNocG9pbnQgc2V0IHRvIHRoZSBERkcgZGlyZWN0bHksIGFuZCBoYXZl
IHlvdXIgb3duIHdheSBvZiB2YWxpZGF0aW5nIHdoZXRoZXIKKyAgICAvLyAgIHRoZSBhc3N1bXB0
aW9ucyB0aGF0IHRoZSBERkcgdGhyZWFkIHVzZWQgYXJlIHN0aWxsIHZhbGlkIHdoZW4gdGhlIERG
RyBjb2RlIGlzIGluc3RhbGxlZC4KICAgICBib29sIGlzQmVpbmdXYXRjaGVkKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmIChpc0ZhdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDE4OTU3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsOSArMTE2LDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEZpbHRy
YXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAg
RmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwg
U3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQpOworICAgICAgICByZXR1cm4gZmlsdGVy
KGZvck5vZGUobm9kZSksIHNldCwgYWRtaXR0ZWRUeXBlcyk7CiAgICAgfQogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xMzksNyArMTM5LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gZmlsdGVyQnlWYWx1ZShmb3JOb2RlKG5vZGUpLCB2YWx1ZSk7CiAgICAgfQogICAgIAot
ICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1
cmVTZXQmKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29u
c3QgU3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25l
KTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQWJzdHJhY3RWYWx1ZSYs
IEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUm
LCBTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFi
c3RyYWN0VmFsdWUmLCBGcm96ZW5WYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAxODk1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjksMTAgKzE4MjksMTAgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1f
c3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlz
RmluaXRlKCkKICAgICAgICAgICAgICYmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpKSB7Ci0gICAgICAgICAgICBHZXRC
eUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAg
ICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCldKTsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKyAg
ICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cih2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0aGUgcmVz
dWx0IGlzIGdvaW5nIHRvIGJlIC0gaXMgaXQgVE9QLCBhIGNvbnN0YW50LCBvciBtYXliZQogICAg
ICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KQEAgLTE4NDEsMjIgKzE4NDEs
MTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52
b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3ZSdkCiAgICAgICAgICAgICAgICAgICAgIC8v
IGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50
UmVzdWx0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFjb25zdGFudFJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1h
a2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNl
dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShjb25z
dGFudFJlc3VsdCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNs
b2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1
bHQpOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlLCB1aWQsIHN0YXR1c1tpXS5vZmZzZXQoKSwgbV9ncmFwaC5z
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxh
bi5tb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwog
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xODgwLDcgKzE4NzAsNiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8v
IEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCiAgICAg
ICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgIApA
QCAtMTg4OCwxMiArMTg3NywyMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0aW5nLiBJ
biB0aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCiAgICAgICAgIC8v
IG1vcmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkgZG9uJ3QuCiAgICAgICAgIAotICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgIGlmICh2YWx1
ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZv
dW5kQ29uc3RhbnRzKHRydWUpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlw
ZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNw
ZWNOb25lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXI6Cisg
ICAgICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY090aGVyOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwg
IkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAg
ICBmaWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAgIAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNl
dCwgYWRtaXR0ZWRUeXBlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0y
MDg0LDEzICsyMDg0LDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLCBkYXRhLm9mZnNldCk7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VIZWFwVG9wKCk7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXTsKKworICAgICAgICAvLyBGSVhNRTog
VGhlIHBhcnQgb2YgdGhpcyB0aGF0IGhhbmRsZXMgaW5mZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVs
aWVzIG9uIEFJIGtub3dpbmcgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyByaWdodCBub3cuIFRo
YXQncyBwcm9iYWJseSBub3Qgb3B0aW1hbC4gSW4gc29tZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0g
YW4gb3B0aW1pemF0aW9uICh1c3VhbGx5CisgICAgICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0
aGFuIEFJLCBtYXliZSBieSBDU0UgZm9yIGV4YW1wbGUpIHRoYXQgb2JzY3VyZXMgQUkncyB2aWV3
IG9mIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIEdldEJ5T2Zm
c2V0IHJ1bnMuIEN1cnJlbnRseSwgd2hlbiB0aGF0IGhhcHBlbnMsIHdlJ2xsIGhhdmUgdG8gcmVs
eSBlbnRpcmVseQorICAgICAgICAvLyBvbiB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIHdh
cyBhYmxlIHRvIHByb3ZlLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9ncmFwaC5p
bmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKSwgdWlkLCBkYXRhLm9mZnNldCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7
CisKKyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQ
YXJzZXIgY2FtZSB1cCB3aXRoIGlzIGJldHRlci4KKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBl
RnJvbVBhcnNpbmc7CisgICAgICAgIHR5cGVGcm9tUGFyc2luZy5zZXQobV9ncmFwaCwgZGF0YS0+
aW5mZXJyZWRUeXBlLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAg
dmFsdWUuZmlsdGVyKHR5cGVGcm9tUGFyc2luZyk7CisKKyAgICAgICAgLy8gSWYgd2UgZGVjaWRl
IHRoYXQgdGhlcmUgZG9lcyBub3QgZXhpc3QgYW55IHZhbHVlIHRoYXQgdGhpcyBjYW4gcmV0dXJu
LCB0aGVuIGl0J3MgcHJvYmFibHkKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcGlsYXRpb24g
d2FzIGFscmVhZHkgaW52YWxpZGF0ZWQuCisgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisg
ICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworCisgICAgICAgIGZvck5vZGUo
bm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgaWYgKHZhbHVlLm1fdmFsdWUpCisgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMjEyMCw2ICsyMTM2LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gY29tcGls
ZSB0aW1lcywgYnV0IHRoaXMgbm9kZSBpcyBGVEwtb25seS4KICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KS5pZGVudGlmaWVyTnVtYmVyXTsKKwogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwpAQCAtMjEyOSwxOCArMjE0NywyOSBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoc2V0Lmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQu
bWVyZ2Uoc2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGdldENhc2UubWV0aG9k
KCkua2luZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewotICAgICAgICAgICAg
ICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBzd2l0Y2ggKGdldENhc2UubWV0aG9kKCkua2luZCgpKSB7CisgICAgICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDogeworICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKKyAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgICAgICAgICAgKmdldENh
c2UubWV0aG9kKCkuY29uc3RhbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNS
ZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAgICB0
aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAgICAgICAg
ICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5z
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jl
c3VsdCk7CisKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZldE1ldGhvZDo6TG9hZDogeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5p
bmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIHVp
ZCwgZ2V0Q2FzZS5tZXRob2QoKS5vZmZzZXQoKSwgbV9ncmFwaC5zdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZSht
X2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0aW9uKQpAQCAtMjYxNSw5ICsyNjQ0LDkgQEAg
dm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcigKLSAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQogewot
ICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0KSA9PSBGaWx0cmF0aW9uT0spCisgICAg
aWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQsIGFkbWl0dGVkVHlwZXMpID09IEZpbHRyYXRp
b25PSykKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgIHJldHVybiBDb250cmFkaWN0aW9uOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxODk1NzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDU5IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0VHlw
ZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKK3ZvaWQgQWJzdHJh
Y3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIHNldFR5cGUoU3Bl
Y0Jvb2xlYW4pOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVy
OgorICAgICAgICBzZXRUeXBlKFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpEb3VibGU6CisgICAgICAgIHNldFR5
cGUoU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHNldFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHNl
dChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1lcmdlKFNwZWNP
dGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0Ogor
ICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBzZXRUeXBlKGdyYXBo
LCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG1ha2VIZWFwVG9wKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldCgKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKK3sKKyAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIGlmIChjbG9iYmVyU3RhdGUg
PT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsK
K30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgm
IGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KHJlcHJlc2VudGF0aW9uID09IE5vZGVSZXN1bHREb3VibGUpIHsKQEAgLTE4OSw4ICsyNDIsMTEg
QEAgYm9vbCBBYnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBv
bGRNZSAhPSAqdGhpczsKIH0KIAotRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorRmlsdHJhdGlvblJl
c3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoCisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIG90aGVyLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQogeworICAgIEFT
U0VSVCghKGFkbWl0dGVkVHlwZXMgJiBTcGVjQ2VsbCkpOworICAgIAogICAgIGlmIChpc0NsZWFy
KCkpCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgCkBAIC0xOTgsNyArMjU0LDcg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIC8vIGhhdmlu
ZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCiAgICAgCi0gICAg
bV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3R5cGUg
Jj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIHwgYWRtaXR0ZWRUeXBlczsKICAg
ICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAg
bV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODk1NzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBA
IC0yMTQsNyArMjE1LDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgbV92YWx1
ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KLSAgICAK
KworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7
CisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworCiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRp
b24oR3JhcGgmLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlKik7CiAgICAgCkBA
IC0yODAsOCArMjg0LDE0IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAg
IHJldHVybiAhKG1fdHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAgfQorCisgICAgLy8gRmlsdGVy
cyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElmIHRoZSBhZG1pdHRl
ZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAgICAvLyBpbXBsaWNpdGx5IGZp
bHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFy
ZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwuIEhlbmNlLCBhZnRlciB0aGlz
IGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24tY2VsbCBtZW1iZXJz
LiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21l
IG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0
byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVk
VHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3Jh
cGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFy
cmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3Vs
YXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96
ZW5WYWx1ZSYgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4OTU3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUs
OSArMjA1LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVj
a3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0
IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZz
ZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUq
IHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVU
eXBlID0gR2V0QnlPZmZzZXQpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBO
b2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5
T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9k
ZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJl
IHNldC4gRG9lcyBub3QKICAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlv
biwgYnV0IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJh
ZGljdGlvbi4KQEAgLTIzMDMsNyArMjMwMiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5v
ZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxNCwx
MyArMjMxNSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
YWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJO
dW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVy
cmVkVHlwZTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9w
SW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwog
CiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeU9mZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRU
eXBlLAorICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzEsNiArMjMzNSw3IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5v
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7
CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAgIE5vZGUq
IHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlT
dG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ1LDcgKzI0NTAsOCBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFu
dCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAgICAgICAgcmV0
dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVt
YmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zm
c2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIs
IG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9CiAgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhp
cyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTUxLDEzICsyNTU3LDEzIEBAIE5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsK
ICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0g
YmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKICAgICAgICAgLy8gVHJ5
IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90
IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYgdGhlIGJhc2Un
cyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRm
Z1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90
eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAg
Ly8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBh
bGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjIyLDkgKzI2MjgsMTYgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQorCisg
ICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CisgICAgICAgIGlm
IChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKQorICAgICAgICAgICAgICAgIGluZmVycmVk
VHlwZS5tZXJnZShtX2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlk
KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRU
eXBlOjpUb3A7CiAgICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBs
b2FkT3ApOwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2MzUsNyArMjY0
OCw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxF
QVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAK
ICAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRp
Zmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVy
biBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZh
cmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuaW5mZXJyZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNk
ZWZpbmUgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERG
RydzIGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3
ZSB3YW50IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0
IHRoaXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFz
cyBEZXNpcmVkSW5mZXJyZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBl
KCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
RGVzaXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisg
ICAgICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgRGVzaXJl
ZEluZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2V4cGVjdGVkKFRvcCkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0
ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0
CisgICAgeworICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmpl
Y3QKKyAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0gVG9wOworICAgIH0KKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxJ
bmZlcnJlZFR5cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVkLmhhc2goKSAqIDc7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dCht
X2V4cGVjdGVkLCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlcihtX29iamVjdCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJ
bmZlcnJlZFR5cGUqIG1fb2JqZWN0OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX2V4
cGVjdGVkOworfTsKKworc3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIHsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBhLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geworICAg
IHR5cGVkZWYgSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNoIEhhc2g7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7IH07CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTg5NTcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQCB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludEFkYXB0b3I6CiAgICAgfQogfQogCit2b2lkIEluZmVycmVkVHlwZUFkYXB0b3I6OmFkZChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBDb21t
b25EYXRhJiBjb21tb24pCit7CisgICAga2V5LmFkZChjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNv
ZGVCbG9jaykpOworfQorCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygp
IHsgfQogRGVzaXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiAKQEAg
LTkzLDYgKzk4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QK
ICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5KTsKIH0KIAordm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBr
ZXkpCit7CisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkpOworfQorCiBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMDgsNiArMTE4LDcgQEAgdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAgIG1faW5mZXJyZWRWYWx1
ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9idWZmZXJWaWV3cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2FkYXB0aXZlU3RydWN0dXJl
U2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2luZmVycmVkVHlw
ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKIGJvb2wgRGVzaXJlZFdh
dGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTExNiw3ICsxMjcsOCBAQCBib29s
IERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5l
U2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGls
bFZhbGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCkKLSAgICAg
ICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOworICAgICAgICAm
JiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9p
bmZlcnJlZFR5cGVzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQp
IGNvbnN0CkBAIC0xMjcsNiArMTM5LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJ
bkNvbnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZhbHVlczogIiwgaW5Db250
ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAg
ICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxu
Iik7CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGlu
Q29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOworICAgIG91
dC5wcmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFR5cGVz
LCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAkocmV2aXNpb24gMTg5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRl
ICJERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgog
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uaCIKQEAgLTkxLDYgKzkyLDE4IEBAIHN0cnVjdCBBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRBZGFwdG8KICAgICB9CiB9OwogCitzdHJ1Y3QgSW5mZXJyZWRUeXBlQWRhcHRvciB7
CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5
cGUmLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKGNv
bnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAha2V5
LmlzU3RpbGxWYWxpZCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgRHVtcENvbnRl
eHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGtleSwgY29u
dGV4dCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBl
LCB0eXBlbmFtZSBBZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0Y2hwb2ludFNldFR5cGU+
PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RApAQCAtMTU5LDYgKzE3MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0
aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRp
b24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFz
IHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Ug
ZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVycmVkVHlwZUZvcigpLCB3
aGljaCBkb2VzCisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgorICAgIHZvaWQgYWRkTGF6
aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAgICBib29sIGNvbnNpZGVy
KFN0cnVjdHVyZSopOwogICAgIApAQCAtMTg2LDYgKzIwMywxMCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNXYXRjaGVkKGtleSk7CiAg
ICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNXYXRjaGVkKGtleSk7Cisg
ICAgfQogCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTE5Niw2ICsy
MTcsNyBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRW
YWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVzOwogICAgIEdlbmVy
aWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdX
YXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzPERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlwZUFkYXB0b3I+IG1faW5m
ZXJyZWRUeXBlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODk1NzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg3
LDYgKzg4Nyw1MCBAQCBib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsCiAg
ICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZz
ZXQpKTsKIH0KIAorSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5cGVG
b3IoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCit7CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVk
KGtleS5zdHJ1Y3R1cmUoKSk7CisgICAgCisgICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5cGVz
LmdldChrZXkpOworICAgIGlmIChpdGVyICE9IG1faW5mZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlOworCisgICAgSW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0g
a2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3Ioa2V5LnVpZCgpKTsKKyAgICBpZiAoIXR5
cGVPYmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlw
ZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKworICAg
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVzY3JpcHRvciA9IHR5cGVPYmplY3QtPmRl
c2NyaXB0b3IoKTsKKyAgICBpZiAoIXR5cGVEZXNjcmlwdG9yLmlzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAg
ICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZlcnJl
ZFR5cGVzLmFkZChrZXksIHR5cGVEZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVmZXJl
bmNlcy5hZGRMYXppbHkodHlwZU9iamVjdCk7CisgICAgaWYgKHR5cGVEZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlRGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSk7CisKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhp
cyBkZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkK
KyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9w
bGFuLndhdGNocG9pbnRzLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3Qs
IHR5cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKK2Jv
b2wgR3JhcGg6OndhdGNoRGVzaXJlZFR5cGUoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5
KQoreworICAgIGlmICgha2V5LmlzU3RpbGxWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7Cisg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ga2V5LmV4cGVjdGVkKCkuc3RydWN0dXJlKCkp
CisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV9wbGFuLndhdGNo
cG9pbnRzLmFkZExhemlseShrZXkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6
OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJs
b2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTA2MSw3ICsxMTA1
LDcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwogSlNWYWx1ZSBH
cmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkg
eworICAgIGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xk
IHRoZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTIwLDM1IEBAIEpTVmFsdWUgR3JhcGg6OnRy
eUdldENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShiYXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9CiAKK0Fic3RyYWN0
VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgYmFzZS5m
b3JFYWNoKAorICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICAgICAgdmFsdWUuc2V0KCp0aGlzLCBpbmZl
cnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCkpOworICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKHZhbHVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJz
dHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFi
c3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKKyAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAg
IGlmIChKU1ZhbHVlIHZhbHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQp
KSB7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0
aGlzLCAqZnJlZXplKHZhbHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAg
ICByZXR1cm4gaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCks
IHVpZCwgY2xvYmJlclN0YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9w
KCk7Cit9CisKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVl
IGJhc2UsIFNjb3BlT2Zmc2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21l
IGNvbmN1cnJlbmN5IHN0b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVD
b2RlUGFyc2VyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gMTg5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NzUsNiArNjc1LDIxIEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYg
aXQncyBrbm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZl
biBvZmZzZXQgaXMgZmluZS4gVGhpcyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdo
aWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wg
aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBU
ZWxscyB1cyB3aGF0IGluZmVycmVkIHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3Bl
cnR5IHRvIGhhdmUgbm93IGFuZCBpbiB0aGUgZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciBpbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSog
c3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGluZmVycmVkVHlwZUZvcihQcm9wZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICB9
CisKKyAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUpOworCisgICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9w
ZXJ0eSBpbmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29v
ZCBhYnN0cmFjdAorICAgIC8vIHZhbHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGgg
dGhlIGdpdmVuIGFic3RyYWN0IHZhbHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJl
ZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUpOwogICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxv
Y2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZy
YW1lKik7CkBAIC04NTYsNiArODcxLDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVu
ZXNzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2ls
bHM+PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQ
cm9wZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtl
eSwgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9taW5h
dG9ycyBtX2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJp
bmc7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4OTU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBzdHJ1
Y3QgQmFzaWNCbG9jazsKIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CisKKyAgICAvLyBU
aGlzIG5lZWRzIHRvIGtub3cgdGhlIGluZmVycmVkIHR5cGUuIEZvciBwdXRzLCB0aGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gcmVtZW1iZXIKKyAgICAvLyB3aGF0IGNoZWNrIGlz
IG5lZWRlZC4gRm9yIGdldHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIEFJ
IG1pZ2h0IGZvcmdldCB3aGF0IHR5cGUgaXMKKyAgICAvLyBndWFyYW50ZWVkLgorICAgIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CiB9OwogCiBzdHJ1Y3QgTXVsdGlQdXRC
eU9mZnNldERhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0
eVR5cGVLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BlcnR5VHlwZUtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1Byb3BlcnR5VHlwZUtleV9oCisjZGVmaW5lIERGR1Byb3BlcnR5VHlwZUtleV9oCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBvYmplY3QgaXMgYSBrZXkgZm9yIGZpbmRp
bmcgYSBwcm9wZXJ0eSdzIHR5cGUuIEl0J3MgYSB0dXBsZSBvZiBTdHJ1Y3R1cmUqIGFuZCBVbmlx
dWVkU3RyaW5nSW1wbCouCisKK2NsYXNzIFByb3BlcnR5VHlwZUtleSB7CitwdWJsaWM6CisgICAg
UHJvcGVydHlUeXBlS2V5KCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAg
ICAsIG1fdWlkKG51bGxwdHIpCisgICAgeworICAgIH0KKworICAgIFByb3BlcnR5VHlwZUtleShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBt
X3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgICwgbV91aWQodWlkKQorICAgIHsKKyAgICB9
CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQor
ICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV91aWQoZGVsZXRlZFVJRCgp
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUgJiYgbV91aWQ7IH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICBQcm9wZXJ0eU9mZnNldCB1aWQo
KSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBy
b3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdWlkID09IG90aGVy
Lm1fdWlkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9wZXJ0eVR5cGVL
ZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgKyBXVEY6OlB0
ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCk7CisgICAgfQorCisgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
IW1fb2JqZWN0ICYmIG1fdWlkID09IGRlbGV0ZWRVSUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
CisgICAgeworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQobV9zdHJ1Y3R1
cmUsIGNvbnRleHQpLCAiKyIsIG1fdWlkKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBjb250
ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFVuaXF1ZWRTdHJpbmdJbXBsKiBk
ZWxldGVkVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0
cmluZ0ltcGwqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0KKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKK307
CisKK3N0cnVjdCBQcm9wZXJ0eVR5cGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYSwgY29uc3QgUHJvcGVy
dHlUeXBlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRG
Rzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvcGVydHlUeXBl
S2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFp
dHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVL
ZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHUHJvcGVydHlUeXBlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4OTU3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2
ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICBj
YXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBDZWxs
T3JPdGhlclVzZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIGNhc2UgRnVuY3Rp
b25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg5NTcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyMjksNiArNTIyOSw4MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVHlwZU9mKE5vZGUqCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSogbm9kZSwg
R1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIEFTU0VSVChub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkpOworICAgIAorICAgIGlmIChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5z
aXplKCkgPT0gMSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgQmFk
Q2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAwLAorICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2VsbEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBub2RlLT5z
dHJ1Y3R1cmVTZXQoKVswXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxHUFJUZW1wb3Jhcnk+IHN0cnVjdHVyZTsKKyAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUjsK
KyAgICAgICAgCisgICAgICAgIGlmICh0ZW1wR1BSID09IEludmFsaWRHUFIpIHsKKyAgICAgICAg
ICAgIHN0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8R1BSVGVtcG9yYXJ5Pih0aGlzKTsKKyAg
ICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS0+Z3ByKCk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gdGVtcEdQUjsKKyAgICAgICAgCisgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVy
KEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKVtp
XSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAw
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+c3RydWN0dXJlU2V0
KCkubGFzdCgpKSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBu
b2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2Fz
ZSBDZWxsVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSwgY2VsbC5n
cHIoKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNlbGwg
PSBtX2ppdC5icmFuY2hJZkNlbGwodmFsdWVSZWdzKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICB2YWx1ZVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNP
dGhlciwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIodmFsdWVSZWdzLCB0ZW1w
R1BSKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Cisg
ICAgICAgIGNlbGwubGluaygmbV9qaXQpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
bm9kZSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgICAgICBub1Jlc3VsdCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2Rl
LCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQog
ewogICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CkBAIC01NjMzLDYgKzU3MDcsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlQ2VsbChFZGdlIAogICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCh0aGlzLCBlZGdl
KSkuZ3ByKCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGxPck90aGVy
KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwg
U3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9w
ZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5jaElmQ2VsbChvcGVyYW5kLmpz
VmFsdWVSZWdzKCkpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBvcGVyYW5kLmpzVmFs
dWVSZWdzKCksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICBtX2ppdC5icmFu
Y2hJZk5vdE90aGVyKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgdGVtcEdQUikpOworICAgIG9rLmxp
bmsoJm1faml0KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVk
Z2UgZWRnZSkKIHsKICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QpKQpA
QCAtNTkxMyw2ICs2MDAzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUq
LCBFZAogICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRl
Q2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0VXNlOgog
ICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTg5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjE1LDYgKzIyMTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21waWxlSXNPYmplY3RPck51bGwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzRnVuY3Rpb24o
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZVR5cGVPZihOb2RlKik7CisgICAgdm9pZCBjb21waWxl
Q2hlY2tTdHJ1Y3R1cmUoTm9kZSosIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUik7Cisg
ICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92
ZVRydWVUbyhHUFJSZWcpOwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKQEAgLTIzNzQs
NiArMjM3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRn
ZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRl
Q2VsbChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UpOwogICAgIHZv
aWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRn
ZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
CShyZXZpc2lvbiAxODk1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBj
b25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIAorCiAgICAgLy8gSW4gbW9zdCBjYXNlcywgd2hh
dCB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXMgdmVyaWZ5IHdoZXRoZXIgdGhlIHNldCBpcyB0b3Ag
b3IgY2xvYmJlcmVkLCBhbmQKICAgICAvLyBpZiBub3QsIGVudW1lcmF0ZSB0aGUgc2V0IG9mIHN0
cnVjdHVyZXMuIFVzZSB0aGlzIG9ubHkgaW4gY2FzZXMgd2hlcmUgdGhlIHNpbmdsZXRvbiBjYXNl
IGlzCiAgICAgLy8gbWVhbmluZ2Z1bGx5IHNwZWNpYWwsIGxpa2UgZm9yIHRyYW5zaXRpb25zLgpA
QCAtMjAyLDYgKzIwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIG1fc2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAg
bV9zZXQuZm9yRWFjaChmdW5jdG9yKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNl
S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VL
aW5kLmNwcAkocmV2aXNpb24gMTg5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOSBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAg
ICAgICAgIG91dC5wcmludCgiS25vd25DZWxsIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENlbGxPck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGxPck90aGVyIik7CisgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgb3V0LnByaW50KCJPYmpl
Y3QiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
c2VLaW5kLmgJKHJldmlzaW9uIDE4OTU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIGVudW0gVXNlS2lu
ZCB7CiAgICAgS25vd25Cb29sZWFuVXNlLAogICAgIENlbGxVc2UsCiAgICAgS25vd25DZWxsVXNl
LAorICAgIENlbGxPck90aGVyVXNlLAogICAgIE9iamVjdFVzZSwKICAgICBGdW5jdGlvblVzZSwK
ICAgICBGaW5hbE9iamVjdFVzZSwKQEAgLTEwOCw2ICsxMDksOCBAQCBpbmxpbmUgU3BlY3VsYXRl
ZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgY2FzZSBDZWxsVXNlOgogICAgIGNhc2UgS25v
d25DZWxsVXNlOgogICAgICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2FzZSBDZWxsT3JPdGhl
clVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsIHwgU3BlY090aGVyOwogICAgIGNhc2UgT2Jq
ZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKICAgICBjYXNlIEZ1bmN0aW9uVXNl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTg5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4LDcgQEAgQ2FwYWJpbGl0
eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAgIGNhc2UgS25v
d25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAg
ICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIENlbGxPck90aGVy
VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNh
c2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE4OTU3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDIxICsyMDI2LDU2IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQogICAgIHsKLSAg
ICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAK
ICAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25zdGFudENhY2hl
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOwotICAgICAg
ICAKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNlbGwsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgCi0gICAgICAgIGNoZWNrU3RydWN0dXJl
KAotICAgICAgICAgICAgc3RydWN0dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgZXhpdEtpbmQs
IG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBbdGhpc10gKFN0cnVjdHVyZSog
c3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgIExW
YWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAg
ICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAg
ICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhl
clVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2Vs
bE9yT3RoZXJVc2UgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2Vs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVy
VXNlIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNl
IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAg
ICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3Vy
ZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Cisg
ICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisg
ICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAg
ICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgRlRM
X1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0Nl
bGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgpCkBAIC03NTA5LDYgKzc1NDQsOSBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2Up
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAg
ICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnBy
ZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc1ODks
NiArNzYyNywyMiBAQCBwcml2YXRlOgogICAgICAgICBsb3dDZWxsKGVkZ2UpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2Vs
bE9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlz
Tm90Q2VsbCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNOb3RDZWxsLCBjb250aW51YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2
YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgc3BlY3VsYXRlTWFjaGluZUludChFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODk1NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDYgKzU1LDc1IEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBB
c3NlbWIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgKKyAgICBK
U1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgcmVz
dWx0OworCisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpCb3R0b206CisgICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdEJvb2xlYW4ocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNo
SWZOb3RJbnQzMihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6OkRvdWJsZToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZkludDMyKHJlZ3MpKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdzKSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5n
KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUo
cmVncy5wYXlsb2FkR1BSKCksIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUocmVncy5wYXlsb2FkR1BSKCksIGRlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5j
aElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChy
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6
cHVyaWZ5TmFOKEZQUlJlZyBmcHIpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFO
ID0gYnJhbmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcHIsIGZwcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTU3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2Myw2ICs1NjMsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoMzIo
RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CiAjZW5kaWYKICAgICB9CisKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5cGUoSlNWYWx1
ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBKdW1wIGJyYW5jaFN0cnVjdHVy
ZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1cm4g
YnJhbmNoMzIoY29uZGl0aW9uLCBsZWZ0SGFuZFNpZGUsIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmUt
PmlkKCkpKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZGl0aW9uLCBsZWZ0
SGFuZFNpZGUsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisjZW5kaWYKKyAgICB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2lu
Zm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVk
VHlwZSkgfTsKKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZShWTSYgdm0pCit7
CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJ
bmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUodm0pOworICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVk
VHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlw
ZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJy
ZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZSog
aW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworCisgICAgaWYgKGlu
ZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25h
bEZpbmFsaXplcihpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJlLmdldCgpKTsKK30KKworSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9yVmFsdWUoSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHJldHVy
biBCb29sZWFuOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gT3RoZXI7CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIElu
dDMyOworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gRG91YmxlOwor
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nOworICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAg
aWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKE9iamVjdFdpdGhTdHJ1Y3R1
cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3Q7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRvcDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQoreworICAgIGlmICgqdGhp
cyA9PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICp0aGlzID0g
VG9wOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0
T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBE
b3VibGU6CisgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgbV9raW5kID0gTnVtYmVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIERvdWJs
ZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoK
KyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBOdW1iZXI7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRv
cDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgTnVtYmVyOgorICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2lu
ZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2Jq
ZWN0OgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAqdGhp
cyA9IG90aGVyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAg
bV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAqdGhpcyA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVj
dE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1f
a2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAg
Y2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
Y2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVtb3Zl
U3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAqdGhpcyA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47
CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMoY29u
c3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRvciBtZXJnZWQgPSAq
dGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAqdGhpcyA9PSBtZXJn
ZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1
bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5
cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJlLmdldCgp
KQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJy
ZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3Rp
bGxWYWxpZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0
b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9wKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9PSBl
eHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZChjb25zdCBEZXNj
cmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIHJldHVybiBpc1N0aWxsVmFsaWQobG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChk
ZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQu
YWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChX
YXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIGRlc2NyaXB0b3IoKSk7Cit9CisKK3ZvaWQg
SW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgRGVzY3JpcHRv
ciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3JpcHRvciBvdGhlclR5cGUg
PSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5cGUubWVyZ2Uob3RoZXJU
eXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0gbXlUeXBlKTsgLy8gVGhl
IHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KKworICAg
IHNldChsb2NrZXIsIHZtLCBteVR5cGUpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6bWFrZVRv
cFNsb3coVk0mIHZtKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgc2V0KGxvY2tlciwgdm0sIFRvcCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQo
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3
RGVzY3JpcHRvcikKK3sKKyAgICAvLyBXZSB3aWxsIHRyaWdnZXIgd3JpdGUgYmFycmllcnMgd2hp
bGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3cml0ZSBiYXJyaWVycyBkb24ndCBHQywg
YnV0IHRoYXQKKyAgICAvLyBjb3VsZCBjaGFuZ2UuIElmIGl0IGRvZXMsIHdlIGRvbid0IHdhbnQg
dG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIHVzZWQKKyAgICAvLyBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyIGluIHRoZSBjYWxsZXIsIGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEg
ZmFzdCBwYXRoIHNvIG1heWJlIHRoYXQgd291bGRuJ3QgYmUKKyAgICAvLyBhIGdvb2QgaWRlYS4K
KyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCisgICAgLy8gQmUg
ZGVmZW5zaXZlOiBpZiB3ZSdyZSBub3QgcmVhbGx5IGNoYW5naW5nIHRoZSB0eXBlLCB0aGVuIHdl
IGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9
PSBuZXdEZXNjcmlwdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgbmV3IGRlc2Ny
aXB0b3IgbXVzdCBiZSBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgcHJldmlvdXMgb25lLgorICAgIEFT
U0VSVChuZXdEZXNjcmlwdG9yLnN1YnN1bWVzKGRlc2NyaXB0b3IobG9ja2VyKSkpOworCisgICAg
Ly8gSWYgdGhlIG5ldyBkZXNjcmlwdG9ycyBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLCB0aGVu
IGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugb25lIGlzIG51bGwuCisgICAgaWYgKGRlc2NyaXB0b3Io
bG9ja2VyKS5zdHJ1Y3R1cmUoKSAhPSBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAg
ICBBU1NFUlQoIWRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSB8fCAhbmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSk7CisKKyAgICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHR5cGUsIHNvIG1h
a2Ugc3VyZSB0aGF0IGlmIGFueW9uZSB3YXMgd2F0Y2hpbmcsIHRoZXkgZmluZCBvdXQgYWJvdXQg
aXQgbm93LiBJZgorICAgIC8vIGFueW9uZSBpcyB3YXRjaGluZywgd2UgbWFrZSBzdXJlIHRvIGdv
IHRvIFRvcCBzbyB0aGF0IHdlIGRvbid0IGRvIHRoaXMgc29ydCBvZiB0aGluZyBhZ2Fpbi4KKyAg
ICBpZiAobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAg
ICAgIC8vIFdlIGNhbm5vdCBoYXZlIGJlZW4gaW52YWxpZGF0ZWQsIHNpbmNlIGlmIHdlIHdlcmUs
IHRoZW4gd2UnZCBhbHJlYWR5IGJlIGF0IFRvcC4KKyAgICAgICAgQVNTRVJUKG1fd2F0Y2hwb2lu
dFNldC5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpOworCisgICAgICAgIC8vIFdlJ3JlIGFib3V0
IHRvIGRvIGV4cGVuc2l2ZSB0aGluZ3MgYmVjYXVzZSBzb21lIGNvbXBpbGVyIHRocmVhZCBkZWNp
ZGVkIHRvIHdhdGNoIHRoaXMgdHlwZSBhbmQKKyAgICAgICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFu
Z2VkLiBBc3N1bWUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBk
byBhbnkgbW9yZSB0aGluZ3MgZm9yCisgICAgICAgIC8vIGl0LgorICAgICAgICBuZXdEZXNjcmlw
dG9yID0gVG9wOworCisgICAgICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKCJJbmZlcnJlZCB0
eXBlIGNoYW5nZWQiKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0
cnVjdHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgaWYgKCFuZXdEZXNj
cmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7CisKKyAg
ICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5v
dy4KKyAgICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBpZiAobV9z
dHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0
dXJlcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1
Y3R1cmU+KHRoaXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQobV9zdHJ1Y3R1
cmUuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmluYWxseSwgc2V0IHRoZSBk
ZXNjcmlwdG9yIGtpbmQuCisgICAgbV9raW5kID0gbmV3RGVzY3JpcHRvci5raW5kKCk7CisKKyAg
ICAvLyBBc3NlcnQgdGhhdCB3ZSBkaWQgdGhpbmdzLgorICAgIEFTU0VSVChkZXNjcmlwdG9yKGxv
Y2tlcikgPT0gbmV3RGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVT
dHJ1Y3R1cmUoKQoreworICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKHRoaXMpLT52bSgpOworCisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9wYXJlbnQtPm1fbG9jayk7CisgICAgCisg
ICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIG5l
d0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7CisgICAgCisgICAgc2V0KGxvY2tlciwgdm0s
IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1
cmU6OkluZmVycmVkU3RydWN0dXJlKEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBw
YXJlbnQsIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3Ry
dWN0dXJlOjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgbV9wYXJlbnQt
PnJlbW92ZVN0cnVjdHVyZSgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1
Y3R1cmU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6
aGVhcChtX3BhcmVudCktPnZtKCk7CisKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQobV9wYXJl
bnQpKTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkK
KyAgICAgICAgbV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFR5cGU6OktpbmQga2luZCkK
K3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgor
ICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBvdXQu
cHJpbnQoIk90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
SW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAg
ICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
b3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgb3V0LnByaW50KCJPYmpl
Y3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90
aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG91dC5wcmludCgiVG9wIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5mZGVmIEluZmVycmVkVHlwZV9oCisjZGVmaW5lIEluZmVycmVkVHlwZV9oCisKKyNpbmNs
dWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNlZCBmb3IgdGhlIGluZmVyZW5jZSBv
ZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCisKK2NsYXNzIEluZmVycmVkVHlwZSBm
aW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBCb3R0b20sCisgICAgICAg
IEJvb2xlYW4sCisgICAgICAgIE90aGVyLAorICAgICAgICBJbnQzMiwKKyAgICAgICAgRG91Ymxl
LAorICAgICAgICBOdW1iZXIsCisgICAgICAgIFN0cmluZywKKyAgICAgICAgT2JqZWN0V2l0aFN0
cnVjdHVyZSwKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsCisgICAgICAgIE9i
amVjdCwKKyAgICAgICAgT2JqZWN0T3JPdGhlciwKKyAgICAgICAgVG9wCisgICAgfTsKKworICAg
IGNsYXNzIERlc2NyaXB0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVzY3JpcHRvcigpCisg
ICAgICAgICAgICA6IG1fa2luZChCb3R0b20pCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKG51
bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlc2NyaXB0b3IoS2luZCBr
aW5kLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIpCisgICAgICAgICAgICA6IG1fa2lu
ZChraW5kKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBEZXNjcmlwdG9yIGZvclZhbHVlKEpTVmFsdWUp
OworCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9raW5kID09IEJvdHRvbSAmJiAhbV9zdHJ1Y3R1cmU7CisgICAg
ICAgIH0KKworICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsg
fQorCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmNsdWRlc1ZhbHVlKEpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgICAg
ICBjYXNlIEJvdHRvbToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBjYXNlIEJvb2xlYW46CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigp
OworICAgICAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKTsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0RvdWJsZSgpOworICAgICAgICAgICAgY2Fz
ZSBOdW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7CisgICAg
ICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTdHJp
bmcoKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
ID09IG1fc3RydWN0dXJlOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQor
ICAgICAgICAgICAgICAgICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2Fz
ZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpIHx8IHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIFRvcDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICAgICAmJiBtX3N0
cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlB0ckhh
c2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fa2luZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBtZXJnZShjb25zdCBEZXNj
cmlwdG9yJik7CisgICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUg
b3RoZXIgb25lLgorICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBjb25z
dDsKKworICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5kOworICAgICAgICBTdHJ1Y3R1cmUqIG1fc3Ry
dWN0dXJlOworICAgIH07CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0
dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAor
ICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgIH0K
KyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3Io
bG9ja2VyKTsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcigpLmtpbmQoKTsgfQorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikg
Y29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcigpLnN0cnVjdHVyZSgpOyB9CisKKyAgICBib29sIGlz
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFRvcDsgfQorICAgIGJvb2wgaXNSZWxldmFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7IH0KKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4g
SXQncyBub3QgcmVsZXZhbnQgaWYgaXQncyBUb3AuCisgICAgQUxXQVlTX0lOTElORSBib29sIHdp
bGxTdG9yZVZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIERlc2Ny
aXB0b3IgY3VycmVudERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgICAg
ICBpZiAoY3VycmVudERlc2NyaXB0b3IuaW5jbHVkZXNWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gY3VycmVudERlc2NyaXB0b3Iua2luZCgpICE9IFRvcDsKKyAgICAgICAgcmV0dXJu
IHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgdmFsdWUpOworICAgIH0KKworICAgIC8vIEltbWVkaWF0
ZWx5IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50LgorICAgIHZvaWQgbWFrZVRvcChWTSYgdm0p
CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbWFrZVRvcFNsb3codm0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBj
dXJyZW50bHkgbWFrZXMgc2Vuc2UgdG8gd2F0Y2ggdGhpcyBJbmZlcnJlZFR5cGUgZm9yIHRoaXMg
ZGVzY3JpcHRvci4gTm90ZSB0aGF0CisgICAgLy8gdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFs
c2UgZm9yIFRvcC4KKyAgICBib29sIGNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYpOworICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgRGVz
Y3JpcHRvciYpOworICAgIAorICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqKTsKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQo
V2F0Y2hwb2ludCopOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKFZNJik7CisgICAgfkluZmVycmVkVHlwZSgpOworCisg
ICAgdm9pZCB3aWxsU3RvcmVWYWx1ZVNsb3coVk0mLCBKU1ZhbHVlKTsKKyAgICB2b2lkIG1ha2VU
b3BTbG93KFZNJik7CisgICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFZN
JiwgRGVzY3JpcHRvcik7CisgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgIG11dGFi
bGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworICAgIAorICAgIEtpbmQgbV9raW5kIHsgQm90
dG9tIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSA6IHB1YmxpYyBXYXRjaHBvaW50
LCBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7CisgICAgcHVibGljOgorICAgICAgICBJ
bmZlcnJlZFN0cnVjdHVyZShJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7CisKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5n
ZXQoKTsgfTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJuYWwoY29u
c3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRp
b25hbGx5KCkgb3ZlcnJpZGU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBJbmZlcnJlZFR5cGUq
IG1fcGFyZW50OworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsK
KyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKKworICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNm
b3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCisgICAg
Ly8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlh
bGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKKyAgICAvLyB0aHJl
YWQuIFRoZSBERkcgd2lsbCB1c2UgdGhlIEluZmVycmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBp
dCB3YXRjaGVzLgorICAgIElubGluZVdhdGNocG9pbnRTZXQgbV93YXRjaHBvaW50U2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkluZmVycmVkVHlwZTo6S2luZCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19p
bmZvID0geyAiSW5mZXJyZWRUeXBlVGFibGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKElu
ZmVycmVkVHlwZVRhYmxlKSB9OworCitJbmZlcnJlZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFi
bGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHJlc3VsdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZVRhYmxlPih2bS5oZWFwKSkgSW5m
ZXJyZWRUeXBlVGFibGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9
IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBl
VGFibGUtPkluZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKTsKK30KKworU3Ry
dWN0dXJlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
Q2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGVUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IGpzQ2FzdDxJ
bmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90YWJsZSkgeworICAg
ICAgICBpZiAoZW50cnkudmFsdWUtPmlzUmVsZXZhbnQoKSkKKyAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZlbnRyeS52YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LnZh
bHVlLmNsZWFyKCk7CisgICAgfQorfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxl
OjpnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOworICAgIGlmIChp
dGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRl
ZCB0eXBlcy4KKyAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAg
aXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVk
VHlwZVRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCB1aWQpOwor
fQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Cit9CisK
K2Jvb2wgSW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKAorICAgIFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2Ug
YWdlKQoreworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhh
dCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIAorICAgIGlmIChh
Z2UgPT0gT2xkUHJvcGVydHkpIHsKKyAgICAgICAgVHlwZVRhYmxlOjppdGVyYXRvciBpdGVyID0g
bV90YWJsZS5maW5kKHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUu
ZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYnNl
bmNlIG9uIHJlcGxhY2UgPT4gdG9wLgorICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVl
LT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIAorICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVHlwZVRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0
ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigp
KTsKKyAgICB9CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEluZmVycmVk
VHlwZSogaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNl
dCh2bSwgdGhpcywgaW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3AoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7Cisg
ICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25l
IHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0
eSkgeworICAgICAgICBUeXBlVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJv
cGVydHlOYW1lKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+
dmFsdWUpCisgICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3Au
CisKKyAgICAgICAgaXRlci0+dmFsdWUtPm1ha2VUb3AoKTsKKyAgICAgICAgaXRlci0+dmFsdWUu
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIFR5cGVUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7
CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRvcCgpOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuY2xlYXIoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRv
cEZvclRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBl
VGFibGVfaAorCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBz
b21lIHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0
aGUgU3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8g
bWFuYWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlz
IHRoaW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRo
aXMgaXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVz
CisvLyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVz
IGFyZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFz
IGJlaW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMgd2lsbCBo
YXBwaWx5IGNvbmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KKy8vIGRpZmZlcmVu
dCBzdHJ1Y3R1cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pvaW50IHNl
dHMgb2Ygb2JqZWN0cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGlj
IEluZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29s
IG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAg
IENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisgICAgLy8g
R2V0IHRoZSBjdXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVsbHB0ciBmb3IgYm90aCBU
b3AgYW5kIEJvdHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCisgICAgLy8gb3duaW5nIFN0
cnVjdHVyZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5LgorICAgIEluZmVycmVkVHlw
ZSogZ2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCopOwor
ICAgIEluZmVycmVkVHlwZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRU
eXBlKiBnZXQoUHJvcGVydHlOYW1lKTsKKworICAgIGVudW0gU3RvcmVkUHJvcGVydHlBZ2Ugewor
ICAgICAgICBOZXdQcm9wZXJ0eSwKKyAgICAgICAgT2xkUHJvcGVydHkKKyAgICB9OworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5
IGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QKKyAgICAvLyByZWxl
dmFudCBpZiBpdCdzIFRvcC4gTm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5hbGx5IHBy
dW5lIFRvcCBlbnRyaWVzLgorICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworICAgIC8vIEludmFsaWRhdGVzIHRo
ZSB0eXBlIGZvciB0aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9yZSBpbiBh
IHJlZmxlY3RpdmUgY29udGV4dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0eU5hbWUs
IFN0b3JlZFByb3BlcnR5QWdlKTsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGVUYWJsZShW
TSYpOworICAgIH5JbmZlcnJlZFR5cGVUYWJsZSgpOworCisgICAgLy8gQm90dG9tOiBhYnNlbmNl
IGZyb20gdGFibGUuCisgICAgLy8gVG9wOiBudWxsIHZhbHVlIGluIHRhYmxlLCAhdmFsdWUtPmlz
UmVsZXZhbnQoKSwgb3IgYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vCisgICAgLy8gV2Uga25v
dyBob3cgdG8gZGV0ZXJtaW5lIGlmIGFic2VuY2UgZnJvbSB0aGUgdGFibGUgaXMgYm90dG9tIG9y
IHRvcCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpcyBwcmVzZW50
IGluIHRoZSBvd25pbmcgc3RydWN0dXJlLiBIZW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBzdHJ1Y3R1
cmUsIGFic2VuY2UgbWF5IGhhdmUKKyAgICAvLyBkaWZmZXJlbnQgbWVhbmluZ3MuIFRoZSB3YXkg
dGhhdCB0aGlzIGNsYXNzIGRldGVybWluZXMgaWYgdGhlIG93bmluZyBzdHJ1Y3R1cmUga25vd3Mg
b2YgdGhlIHByb3BlcnR5CisgICAgLy8gaXMgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4g
YWN0aW9uczogcmVwbGFjZSBvciB0cmFuc2l0aW9uLiBJZiB3ZSdyZSBhZGRpbmcgYSBuZXcgcHJv
cGVydHkKKyAgICAvLyAodHJhbnNpdGlvbiksIHRoZW4gYWJzZW5jZSBtZWFucyBib3R0b20uIElm
IHdlJ3JlIHN0b3JpbmcgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkgKHJlcGxhY2UsIHRoZW4KKyAg
ICAvLyBhYnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUgdG8gd2F0
Y2ggb3V0IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCisgICAgLy8g
UzIsIHNoYXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9mIHRoZW0g
aW5pdGlhbGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5CisgICAgLy8gd2FudCB0byBh
ZGQgUCB3aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0aCBhIHR5
cGUuIElmIFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAgIC8vIHRvIGluZGljYXRlIFRv
cCwgdGhlbiBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFuZCB3b3Vs
ZCBlbmQgdXAgY3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50cnkgaW4gdGhlIHRhYmxlLiBU
aGVuIFMxIHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1c2UgUzIn
cyB0eXBlLiBDbGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2ggY29uZnVz
aW9uIGJ5IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVudHJ5LiBI
ZW5jZSwKKyAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8gcGxheSBm
b3IgcHJvcGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdhcworICAg
IC8vIGNyZWF0ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1w
bD4sIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRy
YWl0czxVbmlxdWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7CisgICAgCisgICAgVGFibGVUeXBl
IG1fdGFibGU7CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBsb2NrIHdoZW4gd2UncmUgZG9p
bmcgbW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9yIHJlYWRzIG9uIHRoZSBjb21w
aWxlcgorICAgIC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVhZCBpcyBub3QgYWxsb3dlZCB0
byBkbyBtb2RpZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlVGFibGVfaAorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MTg5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1
Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAg
IEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKICAgICAg
ICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVz
KTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBAIC0xMjI4LDYgKzEy
MzAsOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkg
eworICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7CisgICAgICAgIAog
ICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMjQ0LDEyICsxMjQ4LDE2IEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICB9CiAKICAgICB1
bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgYm9vbCBoYXNJbmZlcnJl
ZFR5cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3Vy
cmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50
QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgIGlmIChV
TkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKQorICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3Rv
cmVWYWx1ZUZvclJlcGxhY2Uodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgp
ID09IFB1dEJ5SWQpOworCiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBv
ZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCkBAIC0xMjY5
LDYgKzEyNzcsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAg
ICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRj
aHBvaW50RmlyZTsKICAgICAKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNl
dCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBzdHJ1Y3R1
cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAxODk1NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsMTEgKzM0NywxNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxl
ID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1
Y3R1cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ld
OwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9u
YW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRy
aWJ1dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUt
PmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQorICAgICAgICAgICAgZW50
cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQo
ZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFu
Z2UpOwogICAgIH0KICAgICAKQEAgLTQ2MSw2ICs0NjUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJl
dmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
KyAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwgdHJh
bnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIAogICAgIG9m
ZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApA
QCAtNDc2LDYgKzQ4MSwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlPZmZzZXQmIG9mZnNldCkKIHsKKyAgICAvLyBOT1RFOiBUaGVyZSBhcmUgc29tZSBnb29k
IHJlYXNvbnMgd2h5IHRoaXMgZ29lcyBkaXJlY3RseSB0byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5
IHJhdGhlciB0aGFuCisgICAgLy8gY2FjaGluZyB0aGUgcmVtb3ZhbC4gV2UgY2FuIGZpeCBhbGwg
b2YgdGhlc2UgdGhpbmdzLCBidXQgd2UgbXVzdCByZW1lbWJlciB0byBkbyBzbywgaWYgd2UgZXZl
ciB0cnkKKyAgICAvLyB0byBvcHRpbWl6ZSB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAtIENh
Y2hlZCB0cmFuc2l0aW9ucyB1c3VhbGx5IHN0ZWFsIHRoZSBwcm9wZXJ0eSB0YWJsZSwgYW5kIGFz
c3VtZSB0aGF0IHRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGV5CisgICAgLy8gICBjYW4ganVz
dCByZWJ1aWxkIHRoZSB0YWJsZSBieSBsb29raW5nIGF0IHBhc3QgdHJhbnNpdGlvbnMuIFRoYXQg
Y29kZSBhc3N1bWVzIHRoYXQgdGhlIHRhYmxlIG9ubHkKKyAgICAvLyAgIGdyZXcgYW5kIG5ldmVy
IHNocmFuay4gVG8gc3VwcG9ydCByZW1vdmFscywgd2UnZCBoYXZlIHRvIGNoYW5nZSB0aGUgcHJv
cGVydHkgdGFibGUgbWF0ZXJpYWxpemF0aW9uCisgICAgLy8gICBjb2RlIHRvIGhhbmRsZSBkZWxl
dGlvbnMuIEFsc28sIHdlIGhhdmUgbG9naWMgdG8gZ2V0IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMg
b24gYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vICAgbGFja3MgYSBwcm9wZXJ0eSB0YWJsZSBieSBq
dXN0IGxvb2tpbmcgYmFjayB0aHJvdWdoIHRoZSBzZXQgb2YgdHJhbnNpdGlvbnMgc2luY2UgdGhl
IGxhc3QKKyAgICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBpbm5lZCB0YWJsZS4gVGhhdCBs
b2dpYyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBoYW5kbGUgY2FjaGVkCisgICAg
Ly8gICByZW1vdmFscy4KKyAgICAvLworICAgIC8vIC0gSW5mZXJyZWRUeXBlVGFibGUgYXNzdW1l
cyB0aGF0IHJlbW92YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlzIGlzIGltcG9ydGFudCBzaW5j
ZSBpZiB3ZSBjb3VsZAorICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVydHkgYW5kIHRoZW4gcmUtYWRk
IGl0IGxhdGVyLCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3AiIG9wdGltaXphdGlvbiB3b3Vs
ZG4ndAorICAgIC8vICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVtb3ZhbCBhbHNvIGVpdGhlciBw
b2lzb25lZCB0eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRoaW5nIGVxdWl2YWxlbnQgdG8K
KyAgICAvLyAgIGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJvbmdseSBtYXJraW5nIHRoZSBl
bnRyeSBhcyBUb3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QgYWJzZW50LCBidXQKKyAgICAv
LyAgIGluc3RlYWQsIGhhcyBhIG51bGwgZW50cnkuCisgICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1
cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwpA
QCAtODM4LDYgKzg2MSw0MyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFs
UHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQg
U3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplLAorICAgIElu
ZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZv
KCkgPT0gaW5mbygpKTsKKyAgICBBU1NFUlQoIWhhZEJlZW5EaWN0aW9uYXJ5KCkpOworCisgICAg
Ly8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBl
bHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQorICAgIC8vIGdy
YWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBJbmZlcnJlZFR5cGVU
YWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgIGlmICghdGFibGUp
IHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsKKyAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlQmFycmllcigpOworICAgICAgICBtX2luZmVycmVkVHlwZVRhYmxl
LnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRoaXMgb25seSB3b3JrcyBp
ZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0
eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVy
dHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcg
Y3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNl
bnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cu
CisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisgICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVy
dHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVy
dHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5KTsKKwor
ICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9
IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSwgYWdlKTsK
KyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOworICAgIH0KK30KKwogI2lm
IERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJv
cGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0xMDU1LDYgKzExMTUsOCBAQCB2b2lkIFN0
cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIH0gZWxzZSBpZiAodGhp
c09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3By
b3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlw
ZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2
aXNpb24gMTg5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDbGFzc0luZm8u
aCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlw
ZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgpAQCAtODEsMTEg
KzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlxdWVkU3RyaW5nSW1w
bCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1aW50OF90IGF0dHJpYnV0
ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Ig
bm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5cGUgaW4gdGhlIGluZmVycmVkIHR5cGUg
dGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1dERpcmVj
dEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVudHJ5KCkKICAgICAgICAgOiBrZXkobnVs
bHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1
dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICB9CiAg
ICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAgICAg
OiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRl
cyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAg
LTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQ
cm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSk7CiAK
ICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNh
bGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAgICAgLy8gU3RydWN0
dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVs
ZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ3Nyw2ICs0ODIsMzQgQEAgcHVibGljOgog
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZO
ZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVycmVkVHlwZVRhYmxlOworICAgIH0KKwor
ICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJl
ZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS0+Z2V0KHVpZCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgaXMgc3RpbGwgdmFsaWQuCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXpl
KQorICAgIHsKKyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRp
bWl6ZSAmJiAhbV9pbmZlcnJlZFR5cGVUYWJsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0
aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpOZXdQcm9wZXJ0eSk7CisgICAgfQorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgIFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRp
bWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB3aWxsU2xvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6T2xkUHJvcGVydHkpOwor
ICAgIH0KKwogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUo
SlNWYWx1ZSk7CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMg
bWF0Y2ggZW5vdWdoIHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMK
QEAgLTYyNyw2ICs2NjAsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRXYXRjaGlu
Z0ludGVybmFsUHJvcGVydGllcyhWTSYpOwogCisgICAgdm9pZCB3aWxsU3RvcmVWYWx1ZVNsb3co
CisgICAgICAgIFZNJiwgUHJvcGVydHlPZmZzZXQsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlKTsKKwogICAgIHN0YXRpYyBj
b25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGlu
dCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAtNjUw
LDYgKzY4Niw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2gg
cHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVy
IHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxl
VW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVk
VHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlv
bldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNl
dCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxODk1
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnN0b3JlZFByb3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNz
SW5mbygpID09IGluZm8oKSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwot
ICAgIGlmICghcHJvcGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0K
LSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0
eU5hbWUudWlkKCkpOwotICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlk
T2Zmc2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5
cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZl
cnJlZFR5cGUpOwogfQogICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzKQogeworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5
cGUpCit7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3IEBA
IEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Cisg
ICAgaGFzSW5mZXJyZWRUeXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1cm4g
ZW50cnktPm9mZnNldDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260958</attachid>
            <date>2015-09-10 14:53:16 -0700</date>
            <delta_ts>2015-09-11 23:57:25 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>128591</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk1ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDMsNiArNzQ1LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTEzLDYgKzE5
MTksOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU2Nyw2ICsyNTc1LDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY0Myw4ICs0
NjU1LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00Njc4LDYgKzQ2OTAsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MjgsMTAgKzQ3
NDQsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDM1LDkgKzUwNTEs
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE4OSw2ICs1MjA1LDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzM2LDYgKzUzNTMsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTIyLDYgKzU5NDAsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDM1LDYg
KzYwNTQsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE5LDYgKzYzMzksNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ4NCw2ICs2
NTA1LDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQyNSw2ICs3NDQ3LDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4MzgsNiArNzg2MSw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0
cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICB9CiAgICAgCiAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7CkBAIC0xMDQsNyArMTA0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1h
dGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgc3RydWN0dXJlLCBuZXdT
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBuZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlw
ZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0xNjMsNyAr
MTY0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAg
ICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBz
dHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTE5NCw3ICsxOTUs
OCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAg
ICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmlu
ZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMDcsNyArMjA5LDggQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAg
ICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNj
ZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVp
ZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIApAQCAtMzMwLDggKzMzMywxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25l
IGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1
Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0K
KyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNl
dCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CkBAIC0zNTcsMTMgKzM2MiwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAgICAKICAgICAgICAgLy8gV2Ugb25seSBv
cHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRp
b24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHko
c3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAg
ICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAg
ICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9u
U2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVz
Y3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZp
c2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50
JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1f
bmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7
CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBtX3JlcXVpcmVkVHlwZSA9IG90
aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4o
Km90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVsc2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQ
dXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlz
OwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJl
c3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWly
ZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1
bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYgKzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5l
d1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9
IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NSw2ICs5MCw3IEBA
IFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
ICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7
CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwxMiBAQCBib29sIFB1dEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zm
c2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXF1aXJlZFR5cGUgIT0g
b3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBz
d2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFjZToKKyAgICBjYXNlIFJlcGxhY2U6IHsK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBSZXBsYWNlOiB7
CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2
ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBvdXQu
cHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgIjxS
ZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAi
LCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCksCisgICAgICAgICAgICAiPiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgb3V0
LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIp
OworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5cGUoKSwgIj4iKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODk1ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1YmxpYzoKICAgICBQdXRCeUlkVmFyaWFu
dChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBs
YWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0
QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIo
CiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9CiAKKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jl
cXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsK
ICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxs
cygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBt
X25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlv
blNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYs
NyArMzM2LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRh
aWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBhbnkgd2F0
Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBpbmNvcnJl
Y3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNo
ZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1cnJlbnRs
eSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNTdGls
bFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAvLyBpZiAo
IXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOworICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQsIGFuZCBz
b3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZlCisgICAg
Ly8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNlLCBpZiBm
aXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAvLyB0aGUg
Zmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVuIGl0IHdv
dWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRpb24gbGF0
ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBvZiBzdGF0
ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0aGUKKyAg
ICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dh
dGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRoZW4gdGhl
IERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJldHdlZW4g
dGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gd29y
ayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0aG91dCBh
IGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRoYXQgdGhl
IHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQgZG9lcyBp
dHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRoZSB3YXRj
aHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3YXkgb2Yg
dmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGUgREZH
IHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBpbnN0YWxs
ZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
aXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDkgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
cihUIG5vZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25SZXN1bHQg
ZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFk
bWl0dGVkVHlwZXMgPSBTcGVjTm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9y
Tm9kZShub2RlKSwgc2V0KTsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBz
ZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFs
dWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKICAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUp
OwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJv
emVuVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5NTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYg
KCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2Ji
ZXJlZCgpCisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAgICAgICAg
ICAgICAmJiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMg
PSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVlLm1fc3Ry
dWN0dXJlLnNldCgpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXSk7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBHZXRCeUlk
U3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1
cmUuc2V0KCksIHVpZCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBi
ZSAtIGlzIGl0IFRPUCwgYSBjb25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAgICAvLyBz
b21ldGhpbmcgbW9yZSBzdWJ0bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMu
IElmIGl0IGRpZCwgd2UnZAogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0
byBkbyBoZXJlLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUs
IHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0
YXR1c1tpXS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1
bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSwgdWlkLCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpID0gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtMTg4MCw3ICsxODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBz
aG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQm
IHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIgKzE4Nzcs
MjMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAv
LyB0aGF0IGluY2x1ZGVzIHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNv
dWxkIG1ha2UgdGhlIHN0cnVjdHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4g
V2UgY3VycmVudGx5IGRvbid0LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
Q2VsbFVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyOgorICAgICAgICAgICAgYWRtaXR0
ZWRUeXBlcyA9IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBz
ZXQpOworICAgICAgICAKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4NCwyOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAg
IGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3Jh
cGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5v
ZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEu
aWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMg
dGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5n
IHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90
IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAo
dXN1YWxseQorICAgICAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkg
Q1NFIGZvciBleGFtcGxlKSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJl
CisgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50
bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAg
ICAgLy8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4K
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5v
ZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAgIC8vIEl0
J3MgcG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0
aCBpcyBiZXR0ZXIuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAg
ICAgICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEtPmluZmVycmVkVHlwZSwgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBl
RnJvbVBhcnNpbmcpOworCisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMg
bm90IGV4aXN0IGFueSB2YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2Jh
Ymx5CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFs
aWRhdGVkLgorICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0
ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Cisg
ICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAs
NiArMjEzNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlz
IG5vZGUgaXMgRlRMLW9ubHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CiAgICAgICAgIAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJl
cl07CisKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVl
IHJlc3VsdDsKQEAgLTIxMjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRC
eU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhl
YXBUb3AoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNo
IChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6Q29uc3RhbnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNS
ZXN1bHQ7CisgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0
YW50KCksCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0g
ICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2Qo
KS5jb25zdGFudCgpLAotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpOwotICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAg
ICAgICBjYXNlIEdldEJ5T2ZmZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1
bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIGdldENhc2UubWV0aG9k
KCkub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkg
PT0gQ29udHJhZGljdGlvbikKQEAgLTIxNjMsNiArMjE5Miw4IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdW
YWx1ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07CkBAIC0yMTcwLDYgKzIyMDEsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAg
ICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1
ZTsKKyAgICAgICAgICAgIHRoaXNWYWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJl
ZFR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzdmFsdWUpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3Ry
dWN0dXJlKCkgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0yMTg1LDYgKzIyMjEsOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhj
bG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24p
CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBmb3Iobm9k
ZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEhb3JpZ2lu
YWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2NCwxNCAr
MjMwMywxOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
Y2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlm
ICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9i
YmVyZWQoKSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLCBiZWNhdXNlIGZpbHRlciBpcyBhbGxvd2Vk
IHRvIGJlIGNvbnNlcnZhdGl2ZS4gV2UgbmVlZCBzb21lIG1vcmUKKyAgICAgICAgICAgIC8vIHBy
ZWNpc2Ugd2F5IG9mIGFza2luZywgImRvZXMgdGhpcyBhYnN0cmFjdCB2YWx1ZSBhbHJlYWR5IG9i
ZXkgdGhlc2UgcmVxdWlyZW1lbnRzPyIuCisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVl
VG9TdG9yZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgdmFsdWVUb1N0
b3JlLmZpbHRlcihtX2dyYXBoLCBzdGF0dXMucmVxdWlyZWRUeXBlKCkpOworCisgICAgICAgICAg
ICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkgJiYgdmFsdWVUb1N0b3JlID09IGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpKSB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAg
ICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwogICAgICAgICAgICAgICAg
IApAQCAtMjYxNSw5ICsyNjU5LDkgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcigK
LSAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVk
VHlwZSBhZG1pdHRlZFR5cGVzKQogewotICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0
KSA9PSBGaWx0cmF0aW9uT0spCisgICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQsIGFk
bWl0dGVkVHlwZXMpID09IEZpbHRyYXRpb25PSykKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25P
SzsKICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgIHJldHVybiBDb250cmFkaWN0
aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDU5IEBAIHZv
aWQgQWJzdHJhY3RWYWx1ZTo6c2V0VHlwZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHN3aXRjaCAoZGVz
Y3JpcHRvci5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAg
ICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xl
YW46CisgICAgICAgIHNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBzZXRUeXBlKFNwZWNPdGhlcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHNl
dFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpEb3VibGU6CisgICAgICAgIHNldFR5cGUoU3BlY0J5dGVjb2RlRG91YmxlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHNldFR5cGUo
U3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpTdHJpbmc6CisgICAgICAgIHNldChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgIG1lcmdlKFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVy
OgorICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG1ha2VIZWFw
VG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldCgKKyAgICBHcmFwaCYgZ3Jh
cGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgU3RydWN0dXJl
Q2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Ip
OworICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKK30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBl
Rm9yUmVwcmVzZW50YXRpb24oR3JhcGgmIGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24s
IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKHJlcHJlc2VudGF0aW9uID09IE5vZGVSZXN1bHREb3Vi
bGUpIHsKQEAgLTE4OSw4ICsyNDIsMTEgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjptZXJnZU9TUkVu
dHJ5VmFsdWUoRwogICAgIHJldHVybiBvbGRNZSAhPSAqdGhpczsKIH0KIAotRmlsdHJhdGlvblJl
c3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoCisgICAg
R3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzKQogeworICAgIEFTU0VSVCghKGFkbWl0dGVkVHlwZXMgJiBTcGVjQ2VsbCkp
OworICAgIAogICAgIGlmIChpc0NsZWFyKCkpCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7
CiAgICAgCkBAIC0xOTgsNyArMjU0LDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVl
OjpmaWx0ZXIoRwogICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBz
cGVjaWZpYyB2YWx1ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA5NjYzCiAgICAgCi0gICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0
cnVjdHVyZXMoKTsKKyAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
cygpIHwgYWRtaXR0ZWRUeXBlczsKICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rl
c0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKICAgICAK
QEAgLTMxNSw2ICszNzEsMTMgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoYwogICAgIHJldHVybiBDb250cmFkaWN0aW9uOwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBYnN0cmFjdFZhbHVlIGZpbHRlclZhbHVlOwor
ICAgIGZpbHRlclZhbHVlLnNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIGZpbHRl
cihmaWx0ZXJWYWx1ZSk7Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5
cGUoKQogewogICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0
aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODk1ODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1
ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIkR1bXBDb250ZXh0
LmgiCkBAIC0yMTQsNyArMjE1LDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAg
bV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0K
LSAgICAKKworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJik7CisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworCiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVz
ZW50YXRpb24oR3JhcGgmLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqID0gbnVsbHB0
cik7CiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlKik7CiAg
ICAgCkBAIC0yODAsMTcgKzI4NCwyNSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewog
ICAgICAgICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KKworICAgIC8v
IEZpbHRlcnMgdGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBJZiB0aGUg
YWRtaXR0ZWRUeXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCisgICAgLy8gaW1wbGlj
aXRseSBmaWx0ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3
aGljaCBhcmUgdXN1YWxseSBhIHN1YnNldCBvZgorICAgIC8vIFNwZWNDZWxsLiBIZW5jZSwgYWZ0
ZXIgdGhpcyBjYWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgbm9uLWNlbGwg
bWVtYmVycy4gQnV0LCB5b3UgY2FuCisgICAgLy8gdXNlIGFkbWl0dGVkVHlwZXMgdG8gcHJlc2Vy
dmUgc29tZSBub24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0IGl0J3Mgd3JvbmcgZm9yIGFkbWl0dGVk
VHlwZXMgdG8gb3ZlcmxhcAorICAgIC8vIHdpdGggU3BlY0NlbGwuCisgICAgRmlsdHJhdGlvblJl
c3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
KFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29u
c3QgRnJvemVuVmFsdWUmIHZhbHVlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihjb25z
dCBBYnN0cmFjdFZhbHVlJik7CisKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIEZpbHRyYXRpb25S
ZXN1bHQgY2hhbmdlU3RydWN0dXJlKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAg
CiAgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wg
dmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hlYXBU
b3AoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDkgKzIwNSw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3Vs
dE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0
b3ImIGluc2VydENoZWNrcyk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4K
ICAgICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5j
dG9yJiBpbnNlcnRDaGVja3MpOwotICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJh
c2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0g
ICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5
T2Zmc2V0KTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBH
ZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYsIE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVj
dWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGVUeXBlID0gR2V0
QnlPZmZzZXQpOwogCiAgICAgLy8gQ3JlYXRlIGEgcHJlc2VuY2UgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gYmFzZWQgb24gc29tZSBrbm93biBvZmZzZXQgYW5kIHN0cnVjdHVyZSBzZXQuIERvZXMg
bm90CiAgICAgLy8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25kaXRpb24sIGJ1dCBpdCBt
YXkgcmV0dXJuIGEgbnVsbCBvbmUgaWYgaXQgZW5jb3VudGVycyBhIGNvbnRyYWRpY3Rpb24uCkBA
IC0yMzAzLDcgKzIzMDIsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudElu
dGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkK
K05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKKyAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBpbmZlcnJlZFR5cGUsIE5vZGVUeXBlIG9wKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFn
ZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMTQsMTMgKzIzMTUsMTYg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAg
IGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRl
bnRpZmllck51bWJlcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CiAg
ICAgCiAgICAgTm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSks
IE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIAogICAgIHJldHVy
biBnZXRCeU9mZnNldDsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zm
c2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQo
CisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwKKyAgICBO
b2RlKiB2YWx1ZSkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzMxLDYgKzIzMzUsNyBAQCBOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zm
c2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOworICAgIGRhdGEt
PmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAgICAKICAgICBOb2RlKiByZXN1bHQgPSBh
ZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIHByb3BlcnR5U3RvcmFnZSwgYmFz
ZSwgdmFsdWUpOwogICAgIApAQCAtMjQ0NSw3ICsyNDUwLDggQEAgTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmxvYWQoCiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyht
ZXRob2QuY29uc3RhbnQoKSkpOwogICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9t
UHJvdG90eXBlOiB7CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0
YW50LCBPcEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7Ci0gICAgICAgIHJldHVybiBoYW5kbGVH
ZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9k
Lm9mZnNldCgpLCBvcCk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAg
ICAgICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zm
c2V0KCksIEluZmVycmVkVHlwZTo6VG9wLCBvcCk7CiAgICAgfQogICAgIGNhc2UgR2V0QnlPZmZz
ZXRNZXRob2Q6OkxvYWQ6CiAgICAgICAgIC8vIFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFu
TG9hZCgpLgpAQCAtMjU1MSwxMyArMjU1NywxMyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKICAgICAKICAgICBib29sIG5lZWRTdHJ1Y3R1cmVDaGVjayA9IHRydWU7CiAgICAgCisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVy
TnVtYmVyXTsKKyAgICAKICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IGJhc2UtPmR5bmFt
aWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7CiAgICAgICAgIC8vIFRyeSB0byBvcHRpbWl6
ZSBhd2F5IHRoZSBzdHJ1Y3R1cmUgY2hlY2suIE5vdGUgdGhhdCBpdCdzIG5vdCB3b3J0aCBkb2lu
ZyBhbnl0aGluZyBhYm91dCB0aGlzCiAgICAgICAgIC8vIGlmIHRoZSBiYXNlJ3Mgc3RydWN0dXJl
IGlzIHdhdGNoZWQuCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+Y29uc3Rh
bnQoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRj
aCgpKSB7Ci0gICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIGxvYWRpbmcgZnJvbSBhIHByb3RvdHlwZS4gV2UgZXhw
ZWN0IHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZQogICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5
LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mIHRoZSBz
dHJ1Y3R1cmVzIGluIHRoZQpAQCAtMjYyMiw5ICsyNjI4LDE2IEBAIE5vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpsb2FkKAogICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgICAgIHJl
dHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CiAgICAgICAgIH0KKworICAgICAgICBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlOworICAgICAgICBpZiAobmVlZFN0cnVj
dHVyZUNoZWNrKSB7CisgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKSkKKyAgICAgICAgICAgICAgICBpbmZlcnJlZFR5cGUubWVyZ2Uo
bV9ncmFwaC5pbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCkpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwog
ICAgICAgICAKICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAg
ICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpLCBsb2FkT3ApOworICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGluZmVycmVkVHlwZSwgbG9hZE9wKTsKICAg
ICB9CiAKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CkBAIC0yNjM1LDcgKzI2NDgsNyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgCiAgICAgUkVMRUFTRV9BU1NFUlQo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQ
cmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJp
YW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKLSAgICByZXR1cm4gaGFuZGxlUHV0
QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOworICAg
IHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNl
dCgpLCB2YXJpYW50LmluZmVycmVkVHlwZSgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5SWQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rl
c2lyZWRJbmZlcnJlZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJ
bmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3Rh
dGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0
byBoYXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVj
dCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZElu
ZmVycmVkVHlwZSB7CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAg
IDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZl
cnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgZXhwZWN0ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1f
ZXhwZWN0ZWQoZXhwZWN0ZWQpCisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5
cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51
bGxwdHIpCisgICAgICAgICwgbV9leHBlY3RlZChUb3ApCisgICAgeworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVjdCAmJiBtX2V4cGVj
dGVkOyB9CisKKyAgICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0OyB9CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBlY3RlZDsgfQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVjdGVkKTsKKyAgICB9
CisKKyAgICB2b2lkIGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25zdAorICAgIHsKKyAg
ICAgICAgbV9vYmplY3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAgICAg
ICAgICAmJiBtX2V4cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFt
X29iamVjdCAmJiBtX2V4cGVjdGVkID09IFRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBl
Kj46Omhhc2gobV9vYmplY3QpICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKworICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwg
Y29udGV4dCksICIgZm9yICIsIFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNv
bnRleHQob3V0LCBjb250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBl
KiBtX29iamVjdDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKK307
CisKK3N0cnVjdCBEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgp
OyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwg
Y29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxK
U0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZEluZmVy
cmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsMTEgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9y
OgogICAgIH0KIH0KIAordm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29t
bW9uKQoreworICAgIGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsK
K30KKwogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2ly
ZWRXYXRjaHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5OCwx
MSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9hZGFw
dGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNo
cG9pbnRzOjphZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQoreworICAg
IG1faW5mZXJyZWRUeXBlcy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0
dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJlZFdh
dGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFk
ZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNv
ZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxseUFk
ZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6
YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3Rp
bGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAg
ICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2
ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRUeXBl
cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApAQCAt
MTI3LDYgKzEzOSw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFAK
ICAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVy
cmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZp
ZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAgIG91
dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAg
ICBJbmZlcnJlZCB0eXBlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4dCks
ICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9u
IDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVzaXJl
ZEluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJK
U0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgi
CkBAIC05MSw2ICs5MiwxOCBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRh
cHRvCiAgICAgfQogfTsKIAorc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0YXRp
YyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9u
RGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFs
aWQoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0
KQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKKyAg
ICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUg
QWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1OSw2
ICsxNzIsMTAgQEAgcHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9u
J3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNo
IGRvZXMKICAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVy
IGJvb2trZWVwaW5nLgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJik7CisKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwg
dGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9lcwor
ICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBE
ZXNpcmVkSW5mZXJyZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUq
KTsKICAgICAKQEAgLTE4Niw2ICsyMDMsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KKyAgICBi
b29sIGlzV2F0Y2hlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KIAogICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3LDcgQEAgcHJp
dmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZl
cnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdh
dGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFk
YXB0b3I+IG1fYnVmZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4g
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxE
ZXNpcmVkSW5mZXJyZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlwZXM7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Nyw2ICs4ODcsNTAg
QEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLAogICAgIHJldHVybiBt
X3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9CiAK
K0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFBy
b3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFzc2VydElzUmVnaXN0ZXJlZChrZXkuc3RydWN0
dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5mZXJyZWRUeXBlcy5nZXQoa2V5KTsK
KyAgICBpZiAoaXRlciAhPSBtX2luZmVycmVkVHlwZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBp
dGVyLT52YWx1ZTsKKworICAgIEluZmVycmVkVHlwZSogdHlwZU9iamVjdCA9IGtleS5zdHJ1Y3R1
cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGtleS51aWQoKSk7CisgICAgaWYgKCF0eXBlT2JqZWN0KSB7
CisgICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7Cisg
ICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3IgdHlwZURlc2NyaXB0b3IgPSB0eXBlT2JqZWN0LT5kZXNjcmlwdG9yKCk7
CisgICAgaWYgKCF0eXBlRGVzY3JpcHRvci5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBtX2lu
ZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1cm4g
SW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorICAgIAorICAgIG1faW5mZXJyZWRUeXBlcy5hZGQo
a2V5LCB0eXBlRGVzY3JpcHRvcik7CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6
aWx5KHR5cGVPYmplY3QpOworICAgIGlmICh0eXBlRGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAg
ICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZURlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworCisg
ICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJlZCBp
bmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVjdHVyZXMgbWF5CisgICAgLy8gcG9p
bnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNlLgorICAgIG1fcGxhbi53YXRjaHBv
aW50cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVzY3Jp
cHRvcikpOworCisgICAgcmV0dXJuIHR5cGVEZXNjcmlwdG9yOworfQorCitib29sIEdyYXBoOjp3
YXRjaERlc2lyZWRUeXBlKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKK3sKKyAgICBp
ZiAoIWtleS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9w
bGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkub2JqZWN0KCkpOworICAgIGlmIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGtleS5leHBlY3RlZCgpLnN0cnVjdHVyZSgpKQorICAgICAgICBy
ZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRM
YXppbHkoa2V5KTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0Zv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6
dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRl
Y29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEwNjEsNyArMTEwNSw3IEBAIEpTVmFs
dWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdl
dENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAo
c3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICBpZiAo
c3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBj
b252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlD
b25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVy
dHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDcyNzEKQEAgLTEwNzYsNiArMTEyMCwzNSBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFu
dFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS5tX3Zh
bHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwogfQogCitBYnN0cmFjdFZhbHVlIEdyYXBo
OjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBiYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0
YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgIGJhc2UuZm9yRWFjaCgKKyAg
ICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNldCgqdGhpcywgaW5mZXJyZWRUeXBlRm9y
UHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1
ZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Fic3RyYWN0VmFsdWUg
R3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisg
ICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1
ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAg
ICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6
ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGlu
ZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShiYXNlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQsIGNsb2Ji
ZXJTdGF0ZSk7CisKKyAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBK
U1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29w
ZU9mZnNldCBvZmZzZXQpCiB7CiAgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5j
eSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTU4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtNjc1LDYgKzY3NSwyMSBAQCBwdWJsaWM6CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24g
dGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlz
IGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRp
b25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KICAgICBib29sIGlzU2FmZVRvTG9h
ZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworCisgICAgLy8gVGVsbHMgdXMgd2hh
dCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZl
IG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5m
ZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5
cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgfQorCisgICAgQWJz
dHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0
YXRlKTsKKworICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29uc3RhbnQgcHJvcGVydHkgaW5mZXJl
bmNlIG9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRlcml2ZSBhIGdvb2QgYWJzdHJhY3QK
KyAgICAvLyB2YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nlc3NlZCB3aXRoIHRoZSBnaXZlbiBh
YnN0cmFjdCB2YWx1ZSBiYXNlLgorICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICAK
ICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwpAQCAt
ODU2LDYgKzg3MSw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5p
cXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxzPj4gbV9ieXRl
Y29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJvcGVydHlPZmZz
ZXQ+PiBtX3NhZmVUb0xvYWQ7CisgICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXksIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogICAgIERvbWluYXRvcnMgbV9kb21p
bmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIE5h
dHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTEgQEAgc3RydWN0IEJhc2ljQmxv
Y2s7CiBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dDsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworCisgICAgLy8gVGhpcyBuZWVkcyB0
byBrbm93IHRoZSBpbmZlcnJlZCB0eXBlLiBGb3IgcHV0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVj
YXVzZSB3ZSBuZWVkIHRvIHJlbWVtYmVyCisgICAgLy8gd2hhdCBjaGVjayBpcyBuZWVkZWQuIEZv
ciBnZXRzLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSBBSSBtaWdodCBmb3Jn
ZXQgd2hhdCB0eXBlIGlzCisgICAgLy8gZ3VhcmFudGVlZC4KKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgaW5mZXJyZWRUeXBlOwogfTsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRh
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVL
ZXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVy
dHlUeXBlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wZXJ0eVR5
cGVLZXlfaAorI2RlZmluZSBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKKy8vIFRoaXMgb2JqZWN0IGlzIGEga2V5IGZvciBmaW5kaW5nIGEgcHJvcGVy
dHkncyB0eXBlLiBJdCdzIGEgdHVwbGUgb2YgU3RydWN0dXJlKiBhbmQgVW5pcXVlZFN0cmluZ0lt
cGwqLgorCitjbGFzcyBQcm9wZXJ0eVR5cGVLZXkgeworcHVibGljOgorICAgIFByb3BlcnR5VHlw
ZUtleSgpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChu
dWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUo
c3RydWN0dXJlKQorICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICB7CisgICAgfQorCisgICAgUHJv
cGVydHlUeXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBt
X29iamVjdChudWxscHRyKQorICAgICAgICAsIG1fdWlkKGRlbGV0ZWRVSUQoKSkKKyAgICB7Cisg
ICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlICYmIG1fdWlkOyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgdWlkKCkgY29uc3QgeyBy
ZXR1cm4gbV91aWQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5cGVL
ZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90
aGVyLm1fc3RydWN0dXJlCisgICAgICAgICAgICAmJiBtX3VpZCA9PSBvdGhlci5tX3VpZDsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0
ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpICsgV1RGOjpQdHJIYXNoPFVuaXF1
ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAm
JiBtX3VpZCA9PSBkZWxldGVkVUlEKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0
KSwgIisiLCBtX3VpZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgY29udGV4dCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIHN0YXRpYyBVbmlxdWVkU3RyaW5nSW1wbCogZGVsZXRlZFVJRCgp
CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBt
X3N0cnVjdHVyZTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7Cit9OworCitzdHJ1Y3Qg
UHJvcGVydHlUeXBlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJv
cGVydHlUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGEsIGNvbnN0IFByb3BlcnR5VHlwZUtleSYg
YikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb3BlcnR5
VHlwZUtleT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleUhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiA6IFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb3Bl
cnR5VHlwZUtleV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgY2FzZSBCb29sZWFu
VXNlOgogICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6
CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAg
ICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MjMyLDYgKzUyMzIsODAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVP
ZihOb2RlKgogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUsIEdQUlJlZyBjZWxs
R1BSLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlU2V0KCku
c2l6ZSgpKTsKKyAgICAKKyAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEp
IHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJy
YW5jaFdlYWtTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0
KClbMF0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BSVGVtcG9y
YXJ5PiBzdHJ1Y3R1cmU7CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFI7CisgICAgICAgIAor
ICAgICAgICBpZiAodGVtcEdQUiA9PSBJbnZhbGlkR1BSKSB7CisgICAgICAgICAgICBzdHJ1Y3R1
cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEdQUlRlbXBvcmFyeT4odGhpcyk7CisgICAgICAgICAgICBz
dHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiA9IHRlbXBHUFI7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBkb25lOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cihKSVRDb21waWxl
cjo6RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJh
ZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkp
OworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQorfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKK3sKKyAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgQ2VsbFVzZTog
eworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIGNlbGwuZ3ByKCksIEludmFs
aWRHUFJSZWcpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHZh
bHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjZWxsID0gbV9qaXQuYnJh
bmNoSWZDZWxsKHZhbHVlUmVncyk7CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgdmFsdWVSZWdzLCBub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKHZhbHVlUmVncywgdGVtcEdQUikpOworICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBjZWxs
LmxpbmsoJm1faml0KTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHRlbXBHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAgbm9SZXN1bHQodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Ug
a2luZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
bm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkg
ewpAQCAtNTYzNiw2ICs1NzEwLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNl
bGwoRWRnZSAKICAgICAoU3BlY3VsYXRlQ2VsbE9wZXJhbmQodGhpcywgZWRnZSkpLmdwcigpOwog
fQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2Up
Cit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgb2sgPSBtX2ppdC5icmFuY2hJZkNlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygp
KTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBl
ZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhl
cihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKKyAgICBvay5saW5rKCZtX2ppdCk7
Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCiB7
CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKQEAgLTU5MTYsNiAr
NjAwNiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBj
YXNlIENlbGxVc2U6CiAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVy
KGVkZ2UpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgc3Bl
Y3VsYXRlT2JqZWN0KGVkZ2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4OTU4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIxNSw2ICsyMjE1LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUlzT2Jq
ZWN0T3JOdWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVUeXBlT2YoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0
dXJlKE5vZGUqLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOworICAgIHZvaWQgY29t
cGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BS
UmVnKTsKICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkBAIC0yMzc0LDYgKzIzNzYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UpOwogICAgIHZv
aWQgc3BlY3VsYXRlQm9vbGVhbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7
CisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0
ZU9iamVjdChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UpOwogICAgIHZv
aWQgc3BlY3VsYXRlRmluYWxPYmplY3QoRWRnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTg5NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gYXQoaSk7IH0KLSAgICAKKwogICAgIC8vIEluIG1vc3QgY2FzZXMsIHdoYXQgeW91IHJlYWxs
eSB3YW50IHRvIGRvIGlzIHZlcmlmeSB3aGV0aGVyIHRoZSBzZXQgaXMgdG9wIG9yIGNsb2JiZXJl
ZCwgYW5kCiAgICAgLy8gaWYgbm90LCBlbnVtZXJhdGUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzLiBV
c2UgdGhpcyBvbmx5IGluIGNhc2VzIHdoZXJlIHRoZSBzaW5nbGV0b24gY2FzZSBpcwogICAgIC8v
IG1lYW5pbmdmdWxseSBzcGVjaWFsLCBsaWtlIGZvciB0cmFuc2l0aW9ucy4KQEAgLTIwMiw2ICsy
MDIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBtX3NldC5vbmx5U3RydWN0dXJlKCk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIG1fc2V0LmZvckVh
Y2goZnVuY3Rvcik7CisgICAgfQogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJl
dmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDkgQEAgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICBvdXQu
cHJpbnQoIktub3duQ2VsbCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBDZWxsT3JPdGhl
clVzZToKKyAgICAgICAgb3V0LnByaW50KCJDZWxsT3JPdGhlciIpOworICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShy
ZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtu
b3duQm9vbGVhblVzZSwKICAgICBDZWxsVXNlLAogICAgIEtub3duQ2VsbFVzZSwKKyAgICBDZWxs
T3JPdGhlclVzZSwKICAgICBPYmplY3RVc2UsCiAgICAgRnVuY3Rpb25Vc2UsCiAgICAgRmluYWxP
YmplY3RVc2UsCkBAIC0xMDgsNiArMTA5LDggQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVG
aWx0ZXJGb3IoVXNlSwogICAgIGNhc2UgQ2VsbFVzZToKICAgICBjYXNlIEtub3duQ2VsbFVzZToK
ICAgICAgICAgcmV0dXJuIFNwZWNDZWxsOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjQ2VsbCB8IFNwZWNPdGhlcjsKICAgICBjYXNlIE9iamVjdFVzZToKICAg
ICAgICAgcmV0dXJuIFNwZWNPYmplY3Q7CiAgICAgY2FzZSBGdW5jdGlvblVzZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIEtub3duQm9vbGVhblVz
ZToKICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBL
bm93bkNlbGxVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAg
ICAgICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9u
VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNiwyMSArMjAyNiw1NiBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKICAgICB7Ci0gICAgICAgIExWYWx1
ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCiAgICAgICAgIEV4
aXRLaW5kIGV4aXRLaW5kOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3Rh
bnQoKSkKICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCk7Ci0gICAgICAgIAotICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAgICAg
ICAgIHN0cnVjdHVyZUlELCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0
cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsKLSAg
ICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2VsbCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNo
ZWNrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAg
ICBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0g
KFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFr
U3RydWN0dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNl
IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2Vs
bCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRp
b24iKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0Nl
bGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2Up
LCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAg
Y2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAg
ICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsm
XSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdl
YWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNL
KGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090
aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVDaGVja0NlbGwoKQpAQCAtNzUwOSw2ICs3NTQ0LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICAgICAgc3Bl
Y3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIubmVlZHNU
eXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTg5LDYgKzc2MjcsMjIg
QEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVj
dWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90aGVyIGNv
bnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpc05vdENlbGwpKTsK
KworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90Q2Vs
bCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUpKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNwZWN1bGF0
ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2ludGVycHJldGVy
Lm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2
ICs1NSw3NSBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAg
cmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVt
cExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdFR5cGUoCisgICAgSlNWYWx1ZVJlZ3Mg
cmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKK3sKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IHJlc3VsdDsKKworICAg
IHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90
dG9tOgorICAgICAgICByZXN1bHQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3RCb29sZWFuKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RPdGhlcihyZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OkludDMyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90SW50MzIo
cmVncykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpEb3VibGU6
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZJbnQzMihyZWdzKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIocmVncykpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3ROdW1iZXIocmVncykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdzLnBheWxv
YWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChy
ZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKHJlZ3MucGF5bG9h
ZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAg
IEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoU3RydWN0dXJlKHJlZ3MucGF5bG9hZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7
CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChy
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJl
Z3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdz
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTihG
UFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IGJyYW5jaERv
dWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MTks
NiArNzE5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgSnVtcExpc3QgYnJhbmNo
SWZOb3RUeXBlKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVt
cCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhh
bmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw3ICszNzEsOCBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICYmIE1hY3JvQXNz
ZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2Up
Ci0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKSB7CisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LmltcGwoKSkpIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVk
VHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlIiwg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGUpIH07CisKK0luZmVycmVkVHlw
ZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZSogcmVz
dWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlPih2bS5oZWFwKSkg
SW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBzdGF0aWNfY2FzdDxJbmZl
cnJlZFR5cGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGUtPkluZmVycmVkVHlwZTo6fkluZmVy
cmVkVHlwZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IGpzQ2FzdDxJ
bmZlcnJlZFR5cGUqPihjZWxsKTsKKworICAgIGlmIChpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJl
KQorICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoaW5mZXJyZWRUeXBl
LT5tX3N0cnVjdHVyZS5nZXQoKSk7Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIE90aGVyOworICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUuaXNE
b3VibGUoKSkKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChj
ZWxsLT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgaWYg
KGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjptZXJnZShjb25zdCBE
ZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAg
ICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuOgor
ICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgSW50MzI6CisgICAgICAgIHN3aXRj
aCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICBjYXNlIE51
bWJlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE51bWJlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgTnVtYmVyOgor
ICAgICAgICAgICAgbV9raW5kID0gTnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVj
dHVyZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICp0aGlz
ID0gT2JqZWN0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9y
T3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoK
KyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVy
Lm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAg
KnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNl
IE9iamVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Cisg
ICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RPck90aGVyOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMg
PSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdE9y
T3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjoKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgVG9wOgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICp0
aGlzID0gT2JqZWN0OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICByZXR1
cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBj
b25zdAoreworICAgIERlc2NyaXB0b3IgbWVyZ2VkID0gKnRoaXM7CisgICAgbWVyZ2VkLm1lcmdl
KG90aGVyKTsKKyAgICByZXR1cm4gKnRoaXMgPT0gbWVyZ2VkOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvcjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBpZiAo
bV9zdHJ1Y3R1cmUpCisgICAgICAgIG91dC5wcmludCgiOiIsIGluQ29udGV4dCgqbV9zdHJ1Y3R1
cmUsIGNvbnRleHQpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0
cik7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRUeXBlKFZNJiB2bSkKKyAgICA6IEJhc2Uo
dm0sIHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fd2F0Y2hwb2ludFNl
dChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSgp
Cit7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBp
ZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0gZXhwZWN0ZWQ7Cit9CisKK2Jvb2wgSW5m
ZXJyZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7Cisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gaXNTdGls
bFZhbGlkKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0
Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQo
KSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0LmFkZCh3YXRjaHBvaW50KTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGFkZFdhdGNo
cG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlz
KSwgIjoiLCBkZXNjcmlwdG9yKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIERlc2NyaXB0b3IgbXlUeXBlID0gZGVzY3JpcHRvcihs
b2NrZXIpOworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBlID0gRGVzY3JpcHRvcjo6Zm9yVmFsdWUo
dmFsdWUpOworCisgICAgbXlUeXBlLm1lcmdlKG90aGVyVHlwZSk7CisKKyAgICBBU1NFUlQoZGVz
Y3JpcHRvcihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRoZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2Vk
IGlmIHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICBzZXQobG9ja2VyLCB2bSwgbXlUeXBl
KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSkKK3sKKyAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHNldChsb2NrZXIsIHZtLCBU
b3ApOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCit7CisgICAgLy8g
V2Ugd2lsbCB0cmlnZ2VyIHdyaXRlIGJhcnJpZXJzIHdoaWxlIGhvbGRpbmcgb3VyIGxvY2suIEN1
cnJlbnRseSwgd3JpdGUgYmFycmllcnMgZG9uJ3QgR0MsIGJ1dCB0aGF0CisgICAgLy8gY291bGQg
Y2hhbmdlLiBJZiBpdCBkb2VzLCB3ZSBkb24ndCB3YW50IHRvIGRlYWRsb2NrLiBOb3RlIHRoYXQg
d2UgY291bGQgaGF2ZSB1c2VkCisgICAgLy8gR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBpbiB0
aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlciBpcyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0
IHdvdWxkbid0IGJlCisgICAgLy8gYSBnb29kIGlkZWEuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBk
ZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90
IHJlYWxseSBjaGFuZ2luZyB0aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRo
aW5nLgorICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5ldyBkZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5l
cmFsIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4KKyAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJz
dW1lcyhkZXNjcmlwdG9yKGxvY2tlcikpKTsKKworICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRv
cnMgaGF2ZSBkaWZmZXJlbnQgc3RydWN0dXJlcywgdGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNl
IG9uZSBpcyBudWxsLgorICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0g
bmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxv
Y2tlcikuc3RydWN0dXJlKCkgfHwgIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworCisgICAg
Ly8gV2UgYXJlIGNoYW5naW5nIHRoZSB0eXBlLCBzbyBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUg
d2FzIHdhdGNoaW5nLCB0aGV5IGZpbmQgb3V0IGFib3V0IGl0IG5vdy4gSWYKKyAgICAvLyBhbnlv
bmUgaXMgd2F0Y2hpbmcsIHdlIG1ha2Ugc3VyZSB0byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24n
dCBkbyB0aGlzIHNvcnQgb2YgdGhpbmcgYWdhaW4uCisgICAgaWYgKG1fd2F0Y2hwb2ludFNldC5z
dGF0ZSgpICE9IENsZWFyV2F0Y2hwb2ludCkgeworICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBi
ZWVuIGludmFsaWRhdGVkLCBzaW5jZSBpZiB3ZSB3ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBh
dCBUb3AuCisgICAgICAgIEFTU0VSVChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFs
aWRhdGVkKTsKKworICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdz
IGJlY2F1c2Ugc29tZSBjb21waWxlciB0aHJlYWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUg
YW5kCisgICAgICAgIC8vIHRoZW4gdGhlIHR5cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBw
cm9wZXJ0eSBpcyBjcmF6eSwgYW5kIGRvbid0IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgor
ICAgICAgICAvLyBpdC4KKyAgICAgICAgbmV3RGVzY3JpcHRvciA9IFRvcDsKKworICAgICAgICBt
X3dhdGNocG9pbnRTZXQuZmlyZUFsbCgiSW5mZXJyZWQgdHlwZSBjaGFuZ2VkIik7CisgICAgfQor
CisgICAgLy8gUmVtb3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5v
IGxvbmdlciBuZWVkIGl0LgorICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRyOworCisgICAgLy8gQWRkIGEgbmV3IEluZmVycmVk
U3RydWN0dXJlIG9iamVjdCBpZiB3ZSBuZWVkIG9uZSBub3cuCisgICAgaWYgKG5ld0Rlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgYWdyZWUgb24gdGhlIHN0cnVjdHVyZXMgaWYgd2UgZ2V0IGhlcmUuCisg
ICAgICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVy
ZS0+c3RydWN0dXJlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih0aGlzLCBuZXdEZXNjcmlw
dG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkt
PmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KG1fc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRvciBraW5kLgorICAgIG1f
a2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAgLy8gQXNzZXJ0IHRoYXQgd2UgZGlk
IHRoaW5ncy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3Ip
OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBWTSYg
dm0gPSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fcGFyZW50LT5tX2xvY2spOworICAgIAorICAgIERlc2NyaXB0b3IgbmV3RGVzY3Jp
cHRvciA9IGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVj
dHVyZSgpOworICAgIAorICAgIHNldChsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVyZShJ
bmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBtX3BhcmVu
dChwYXJlbnQpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCit7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmlyZUludGVybmFsKGNv
bnN0IEZpcmVEZXRhaWwmKQoreworICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30K
Kwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgpCit7CisgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9wYXJlbnQpLT52bSgpOwor
CisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1fcGFyZW50KSk7CisgICAgCisgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIG1fcGFyZW50LT5yZW1v
dmVTdHJ1Y3R1cmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgb3V0LnByaW50KCJCb3R0
b20iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgor
ICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBvdXQucHJp
bnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6RG91
YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAg
IG91dC5wcmludCgiU3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRo
U3RydWN0dXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50
KCJPYmplY3RPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6VG9wOgorICAgICAgICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luZmRlZiBJbmZlcnJlZFR5cGVf
aAorI2RlZmluZSBJbmZlcnJlZFR5cGVfaAorCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2su
aCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMg
YW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZlcmVuY2Ugb2YgdGhlIHR5cGVzIG9mIG9iamVjdCBw
cm9wZXJ0aWVzLgorCitjbGFzcyBJbmZlcnJlZFR5cGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEluZmVycmVk
VHlwZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1
aW50OF90IHsKKyAgICAgICAgQm90dG9tLAorICAgICAgICBCb29sZWFuLAorICAgICAgICBPdGhl
ciwKKyAgICAgICAgSW50MzIsCisgICAgICAgIERvdWJsZSwKKyAgICAgICAgTnVtYmVyLAorICAg
ICAgICBTdHJpbmcsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmUsCisgICAgICAgIE9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyLAorICAgICAgICBPYmplY3QsCisgICAgICAgIE9iamVjdE9y
T3RoZXIsCisgICAgICAgIFRvcAorICAgIH07CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIERlc2NyaXB0b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQoQm90
dG9tKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBudWxscHRyKQorICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAgICwg
bV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBz
dGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2lu
ZCA9PSBCb3R0b20gJiYgIW1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAgICAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICAgICAgY2FzZSBCb3R0b206CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGNhc2UgT3Ro
ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Cisg
ICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0lu
dDMyKCk7CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuaXNEb3VibGUoKTsKKyAgICAgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc051bWJlcigpOworICAgICAgICAgICAgY2FzZSBTdHJpbmc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzU3RyaW5nKCk7CisgICAgICAgICAgICBjYXNl
IE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2Vs
bCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKKyAgICAg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkKKyAgICAgICAgICAgICAgICAgICAgfHwg
KHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVj
dHVyZSk7CisgICAgICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09i
amVjdCgpOworICAgICAgICAgICAgY2FzZSBUb3A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3Jp
cHRvciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3Ro
ZXIubV9raW5kCisgICAgICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1
Y3R1cmU7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3Jp
cHRvciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1f
c3RydWN0dXJlKSBeIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOworICAgICAgICB9Cisg
ICAgCisgICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgRGVzY3JpcHRvciYpOworICAgICAgICB2b2lk
IHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRl
c2NyaXB0b3IgaXMgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIG90aGVyIG9uZS4KKyAgICAgICAgYm9v
bCBzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBLaW5k
IG1fa2luZDsKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAg
Q29uY3VycmVudEpJVExvY2smIGxvY2soKSBjb25zdCB7IHJldHVybiBtX2xvY2s7IH0KKworICAg
IERlc2NyaXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1
Y3R1cmUoKSA6IG51bGxwdHIpOworICAgIH0KKyAgICAKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0
b3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICB9CisgICAgRGVzY3JpcHRvciBkZXNjcmlw
dG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgfQorICAgIAor
ICAgIEtpbmQga2luZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsg
cmV0dXJuIGRlc2NyaXB0b3IoKS5raW5kKCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZShj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0
b3IoKS5zdHJ1Y3R1cmUoKTsgfQorCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZCA9PSBUb3A7IH0KKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBp
cyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0
J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIEpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNjcmlwdG9y
ID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNjcmlwdG9y
LmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREZXNjcmlw
dG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNsb3codm0s
IHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5cGUgaXJy
ZWxldmFudC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKGlz
VG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1ha2VUb3BTbG93KHZtKTsKKyAg
ICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1ha2VzIHNlbnNlIHRv
IHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3IuIE5vdGUgdGhhdAor
ICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3AuCisgICAgYm9vbCBj
YW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0
b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAKKyAgICB2
b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRj
aHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlw
ZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAgIHZvaWQgd2lsbFN0b3JlVmFsdWVT
bG93KFZNJiwgSlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYpOworICAgIHZvaWQg
c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIERlc2NyaXB0b3IpOworICAgIHZv
aWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1f
bG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9OworCisgICAgY2xhc3MgSW5m
ZXJyZWRTdHJ1Y3R1cmUgOiBwdWJsaWMgV2F0Y2hwb2ludCwgcHVibGljIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUoSW5mZXJy
ZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH07CisKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlk
ZTsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVudDsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgfTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RFOiBJ
ZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0
IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQorICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2gg
aXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2
ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8gdGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRo
ZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxpbmVX
YXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxl
LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25z
dCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZVRh
YmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKKwor
SW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQorewor
ICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsKKyAg
ICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5
cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJs
ZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGVU
YWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxs
KTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IG1fdGFibGUpIHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5p
c1JlbGV2YW50KCkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS52YWx1ZS5jbGVhcigpOworICAgIH0KK30K
KworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImIGxvY2tlciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0
ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKKyAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8
ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBUYWtlIHRo
aXMgb3Bwb3J0dW5pdHkgdG8gcHJ1bmUgaW52YWxpZGF0ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVy
LT52YWx1ZS0+aXNSZWxldmFudCgpKSB7CisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBpdGVyLT52YWx1ZS5n
ZXQoKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICByZXR1cm4gZ2V0KGxvY2tlciwgdWlkKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZl
cnJlZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIGdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworfQorCitib29sIEluZmVycmVkVHlwZVRhYmxl
Ojp3aWxsU3RvcmVWYWx1ZSgKKyAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxn
b3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlm
aWVzIHRoZSBoYXNoIG1hcC4KKyAgICAKKyAgICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7Cisg
ICAgICAgIFR5cGVUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5h
bWUpOworICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4K
KyAgICAgICAgCisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaXRlci0+
dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFR5cGVU
YWJsZTo6QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJlc3VsdCA9IG1fdGFibGUuYWRkKHByb3BlcnR5
TmFtZSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7CisgICAgfQorICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IElu
ZmVycmVkVHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXQodm0sIHRoaXMsIGluZmVycmVkVHlw
ZSk7CisgICAgfSBlbHNlIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT53aWxsU3Rv
cmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IEluZmVycmVkVHlwZVRhYmxlOjptYWtlVG9wKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVy
ZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhh
c2ggbWFwLgorICAgIGlmIChhZ2UgPT0gT2xkUHJvcGVydHkpIHsKKyAgICAgICAgVHlwZVRhYmxl
OjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5kKHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlm
IChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgorCisgICAgICAgIGl0ZXItPnZhbHVl
LT5tYWtlVG9wKCk7CisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICBUeXBlVGFibGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5h
bWUsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOworICAgIGlmICghcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUtPm1ha2VUb3AoKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3BGb3JUcmFuc2l0aW9uKFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmZlcnJl
ZFR5cGVUYWJsZV9oCisjZGVmaW5lIEluZmVycmVkVHlwZVRhYmxlX2gKKworI2luY2x1ZGUgIklu
ZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMg
YSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVzdHJ1
Y3RvciBhbmQgbWFrZXMgbGlmZXR5cGUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNp
bmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJlIGRl
bGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJv
cGVydHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBhbiBJ
bmZlcnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChp
ZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBz
b21lIFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlw
ZXMgb2YgcHJvcGVydGllcyBmcm9tCisvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRo
ZSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2NsYXNz
IEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3Jl
YXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9j
aygpIHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV90YWJsZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIEdldCB0aGUgY3VycmVudCBpbmZlcnJl
ZCB0eXBlLiBSZXR1cm5zIG51bGxwdHIgZm9yIGJvdGggVG9wIGFuZCBCb3R0b20uIE51bGwgbWVh
bnMgQm90dG9tIGlmIHRoZQorICAgIC8vIG93bmluZyBTdHJ1Y3R1cmUgZG9lc24ndCBrbm93IGFi
b3V0IHRoZSBwcm9wZXJ0eS4KKyAgICBJbmZlcnJlZFR5cGUqIGdldChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChV
bmlxdWVkU3RyaW5nSW1wbCopOworICAgIEluZmVycmVkVHlwZSogZ2V0KFByb3BlcnR5TmFtZSk7
CisKKyAgICBlbnVtIFN0b3JlZFByb3BlcnR5QWdlIHsKKyAgICAgICAgTmV3UHJvcGVydHksCisg
ICAgICAgIE9sZFByb3BlcnR5CisgICAgfTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIEluZmVycmVkVHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCByZWxldmFudCBhZnRl
ciB0aGUgc3RvcmUuIEl0J3Mgbm90CisgICAgLy8gcmVsZXZhbnQgaWYgaXQncyBUb3AuIE5vdGUg
dGhhdCB0aGlzIHRhYmxlIHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3AgZW50cmllcy4KKyAgICBi
b29sIHdpbGxTdG9yZVZhbHVlKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBTdG9yZWRQcm9w
ZXJ0eUFnZSk7CisKKyAgICAvLyBJbnZhbGlkYXRlcyB0aGUgdHlwZSBmb3IgdGhlIHByb3BlcnR5
LiBVc2VmdWwgaWYgd2UgZGV0ZWN0IGEgc3RvcmUgaW4gYSByZWZsZWN0aXZlIGNvbnRleHQuCisg
ICAgdm9pZCBtYWtlVG9wKFZNJiwgUHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSk7CisK
K3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlVGFibGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBl
VGFibGUoKTsKKworICAgIC8vIEJvdHRvbTogYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vIFRv
cDogbnVsbCB2YWx1ZSBpbiB0YWJsZSwgIXZhbHVlLT5pc1JlbGV2YW50KCksIG9yIGFic2VuY2Ug
ZnJvbSB0YWJsZS4KKyAgICAvLworICAgIC8vIFdlIGtub3cgaG93IHRvIGRldGVybWluZSBpZiBh
YnNlbmNlIGZyb20gdGhlIHRhYmxlIGlzIGJvdHRvbSBvciB0b3AgZGVwZW5kaW5nIG9uIHdoZXRo
ZXIgdGhlCisgICAgLy8gcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgb3duaW5nIHN0cnVjdHVy
ZS4gSGVuY2UsIGRlcGVuZGluZyBvbiB0aGUgc3RydWN0dXJlLCBhYnNlbmNlIG1heSBoYXZlCisg
ICAgLy8gZGlmZmVyZW50IG1lYW5pbmdzLiBUaGUgd2F5IHRoYXQgdGhpcyBjbGFzcyBkZXRlcm1p
bmVzIGlmIHRoZSBvd25pbmcgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eQorICAgIC8v
IGlzIHRoYXQgd2UgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFjdGlvbnM6IHJlcGxhY2Ugb3IgdHJh
bnNpdGlvbi4gSWYgd2UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5CisgICAgLy8gKHRyYW5zaXRp
b24pLCB0aGVuIGFic2VuY2UgbWVhbnMgYm90dG9tLiBJZiB3ZSdyZSBzdG9yaW5nIHRvIGFuIGV4
aXN0aW5nIHByb3BlcnR5IChyZXBsYWNlLCB0aGVuCisgICAgLy8gYWJzZW5jZSBtZWFucyB0b3Au
IFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBoYXZlIHRvIHdhdGNoIG91dCBmb3IgdGhlIGNhc2Ugd2hl
cmUgdHdvIHN0cnVjdHVyZXMsIFMxIGFuZAorICAgIC8vIFMyLCBzaGFyZSB0aGUgc2FtZSBJbmZl
cnJlZFR5cGVUYWJsZSBhbmQgbmVpdGhlciBvZiB0aGVtIGluaXRpYWxseSBrbm93IGFib3V0IHBy
b3BlcnR5IFAuIFMxIG1heQorICAgIC8vIHdhbnQgdG8gYWRkIFAgd2l0aG91dCBhIHR5cGUsIHdo
aWxlIFMyIG1heSB3YW50IHRvIGFkZCBQIHdpdGggYSB0eXBlLiBJZiBTMSBhZGRlZCBQIGFuZCB1
c2VkIGFic2VuY2UKKyAgICAvLyB0byBpbmRpY2F0ZSBUb3AsIHRoZW4gUzIgd291bGQgdXNlIHRo
YXQgYWJzZW5jZSB0byBtZWFuIEJvdHRvbSBhbmQgd291bGQgZW5kIHVwIGNyZWF0aW5nIGEgbm9u
LVRvcAorICAgIC8vIGVudHJ5IGluIHRoZSB0YWJsZS4gVGhlbiBTMSB3b3VsZCBmb3JnZXQgdGhh
dCBpdCB3YW50ZWQgVG9wLCBhbmQgd291bGQgdXNlIFMyJ3MgdHlwZS4gQ2xlYXJseSwKKyAgICAv
LyB0aGF0J3MgYmFkLiBXZSBhdm9pZCBzdWNoIGNvbmZ1c2lvbiBieSBlbnN1cmluZyB0aGF0IGEg
dHJhbnNpdGlvbiBhbHdheXMgYWRkcyBhbiBlbnRyeS4gSGVuY2UsCisgICAgLy8gYWJzZW5jZS1t
ZWFucy1ib3R0b20gb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIHByb3BlcnRpZXMgYWRkZWQgYmVm
b3JlIHRoZSBJbmZlcnJlZFR5cGVUYWJsZSB3YXMKKyAgICAvLyBjcmVhdGVkLgorICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBXcml0ZUJhcnJpZXI8SW5mZXJy
ZWRUeXBlPiwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8VW5pcXVlZFN0cmluZ0ltcGwq
Pj4gVGFibGVUeXBlOworICAgIAorICAgIFRhYmxlVHlwZSBtX3RhYmxlOworCisgICAgLy8gV2Ug
b25seSBncmFiIHRoaXMgbG9jayB3aGVuIHdlJ3JlIGRvaW5nIG1vZGlmaWNhdGlvbnMgb24gdGhl
IG1haW4gdGhyZWFkLCBvciByZWFkcyBvbiB0aGUgY29tcGlsZXIKKyAgICAvLyB0aHJlYWQuIFRo
ZSBjb21waWxlciB0aHJlYWQgaXMgbm90IGFsbG93ZWQgdG8gZG8gbW9kaWZpY2F0aW9ucy4KKyAg
ICBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEluZmVycmVkVHlwZVRhYmxlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExODksNiAr
MTE4OSw4IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAoc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFz
SW5mZXJyZWRUeXBlcygpKTsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCkgewpAQCAtMTIyOCw2ICsxMjMwLDggQEAgaW5saW5lIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAg
ICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCk7CiAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpIHsKKyAgICAgICAgc3RydWN0dXJlLT53
aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qu
Y29udGV4dCgpID09IFB1dEJ5SWQpOworICAgICAgICAKICAgICAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgp
OwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgewpAQCAtMTI0NCwxMiArMTI0OCwxNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgfQogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0
ZXM7Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVu
dEF0dHJpYnV0ZXMpOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZl
cnJlZFR5cGUpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICBp
ZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxh
Y2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBl
KSkKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKHZtLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRCeUlkKTsKKwogICAgICAg
ICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIApAQCAtMTI2OSw2ICsxMjc3LDcgQEAgaW5saW5lIGJv
b2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIERlZmVycmVkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7CiAgICAgCiAgICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVm
ZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclRy
YW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dEJ5
SWQpOwogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKHN0cnVj
dHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3
LDExICszNDcsMTUgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgog
ICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgdGFibGUpOwog
CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVUYWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUu
Z2V0KCk7CisKICAgICBmb3IgKHNpemVfdCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPm1fbmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJv
cGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0
cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7Cisg
ICAgICAgIGlmICh0eXBlVGFibGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJ
blByZXZpb3VzLmdldCgpKSkKKyAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRy
dWU7CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVy
dHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC00
NjEsNiArNDY1LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAog
ICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwogICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9u
LT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CisgICAgdHJhbnNpdGlvbi0+bV9pbmZl
cnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9p
bmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAKQEAgLTQ3Niw2ICs0ODEsMjQgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogCiBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7
CisgICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUgZ29vZCByZWFzb25zIHdoeSB0aGlzIGdvZXMg
ZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeSByYXRoZXIgdGhhbgorICAgIC8vIGNh
Y2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXggYWxsIG9mIHRoZXNlIHRoaW5ncywgYnV0IHdl
IG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdlIGV2ZXIgdHJ5CisgICAgLy8gdG8gb3B0aW1p
emUgdGhpcyBjYXNlLgorICAgIC8vCisgICAgLy8gLSBDYWNoZWQgdHJhbnNpdGlvbnMgdXN1YWxs
eSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFuZCBhc3N1bWUgdGhhdCB0aGlzIGlzIHBvc3Np
YmxlIGJlY2F1c2UgdGhleQorICAgIC8vICAgY2FuIGp1c3QgcmVidWlsZCB0aGUgdGFibGUgYnkg
bG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBUaGF0IGNvZGUgYXNzdW1lcyB0aGF0IHRoZSB0
YWJsZSBvbmx5CisgICAgLy8gICBncmV3IGFuZCBuZXZlciBzaHJhbmsuIFRvIHN1cHBvcnQgcmVt
b3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIHByb3BlcnR5IHRhYmxlIG1hdGVyaWFsaXph
dGlvbgorICAgIC8vICAgY29kZSB0byBoYW5kbGUgZGVsZXRpb25zLiBBbHNvLCB3ZSBoYXZlIGxv
Z2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG9uIGEgc3RydWN0dXJlIHRoYXQKKyAg
ICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUgYnkganVzdCBsb29raW5nIGJhY2sgdGhyb3Vn
aCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNlIHRoZSBsYXN0CisgICAgLy8gICBzdHJ1Y3R1
cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMgd291bGQgYWxzbyBoYXZlIHRv
IGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAorICAgIC8vICAgcmVtb3ZhbHMuCisgICAgLy8K
KyAgICAvLyAtIEluZmVycmVkVHlwZVRhYmxlIGFzc3VtZXMgdGhhdCByZW1vdmFsIGhhcyBuZXZl
ciBoYXBwZW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgaWYgd2UgY291bGQKKyAgICAvLyAg
IHJlbW92ZSBhIHByb3BlcnR5IGFuZCB0aGVuIHJlLWFkZCBpdCBsYXRlciwgdGhlbiB0aGUgImFi
c2VuY2UgbWVhbnMgdG9wIiBvcHRpbWl6YXRpb24gd291bGRuJ3QKKyAgICAvLyAgIHdvcmsgYW55
bW9yZSwgdW5sZXNzIHJlbW92YWwgYWxzbyBlaXRoZXIgcG9pc29uZWQgdHlwZSBpbmZlcmVuY2Ug
KGJ5IGRvaW5nIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvCisgICAgLy8gICBoYXNCZWVuRGljdGlv
bmFyeSkgb3IgYnkgc3Ryb25nbHkgbWFya2luZyB0aGUgZW50cnkgYXMgVG9wIGJ5IGVuc3VyaW5n
IHRoYXQgaXQgaXMgbm90IGFic2VudCwgYnV0CisgICAgLy8gICBpbnN0ZWFkLCBoYXMgYSBudWxs
IGVudHJ5LgorICAgIAogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0
aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKQEAgLTgzOCw2ICs4NjEsNDMgQEAgdm9p
ZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFBybwogICAgIHNldERpZFdhdGNoSW50
ZXJuYWxQcm9wZXJ0aWVzKHRydWUpOwogfQogCit2b2lkIFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFs
dWVTbG93KAorICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSwKKyAgICBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVk
UHJvcGVydHlBZ2UgYWdlKQoreworICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
KyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CisgICAgQVNT
RVJUKCFoYWRCZWVuRGljdGlvbmFyeSgpKTsKKworICAgIC8vIENyZWF0ZSB0aGUgaW5mZXJyZWQg
dHlwZSB0YWJsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgc28gdGhhdCB3ZSBkb24ndCBH
QyBhZnRlciB3ZSBoYXZlIGFscmVhZHkKKyAgICAvLyBncmFiYmVkIGEgcG9pbnRlciBpbnRvIHRo
ZSBwcm9wZXJ0eSBtYXAuCisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJl
ZFR5cGVUYWJsZS5nZXQoKTsKKyAgICBpZiAoIXRhYmxlKSB7CisgICAgICAgIHRhYmxlID0gSW5m
ZXJyZWRUeXBlVGFibGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUJhcnJp
ZXIoKTsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVUYWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsK
KyAgICB9CisKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEgcHJvcGVydHkg
dGFibGUuCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKKyAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOworCisgICAgLy8gV2Ug
bXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdpdmVuIHByb3Bl
cnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0IHdhcyBwcmVzZW50CisgICAgLy8gYWxyZWFkeSwgc28g
d2UgbXVzdCBoYXZlIGEgcHJvcGVydHkgdGFibGUgbm93LgorICAgIEFTU0VSVChwcm9wZXJ0eVRh
YmxlKTsKKworICAgIC8vIC4uLiBhbmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4KKyAg
ICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5h
bWUudWlkKCkpOworICAgIEFTU0VSVChlbnRyeSk7CisKKyAgICBpZiAoc2hvdWxkT3B0aW1pemUp
CisgICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2lsbFN0b3JlVmFsdWUo
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFnZSk7CisgICAgZWxzZSB7CisgICAgICAgIHRhYmxl
LT5tYWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUsIGFnZSk7CisgICAgICAgIGVudHJ5LT5oYXNJbmZl
cnJlZFR5cGUgPSBmYWxzZTsKKyAgICB9Cit9CisKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRT
CiAKIFByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMqIHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMg
PSAwOwpAQCAtMTA1NSw2ICsxMTE1LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlVW5zYWZlKTsKICAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJs
ZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFy
KCk7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbmZlcnJlZFR5cGVUYWJs
ZSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3Jl
VG8oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVu
dEpJVExvY2suaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJJbmZlcnJl
ZFR5cGVUYWJsZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwu
aCIKICNpbmNsdWRlICJKU1R5cGUuaCIKQEAgLTgxLDExICs4MiwxMyBAQCBzdHJ1Y3QgUHJvcGVy
dHlNYXBFbnRyeSB7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQ7CiAgICAgdWludDhfdCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJy
ZWRUeXBlOyAvLyBUaGlzIGNhY2hlcyB3aGV0aGVyIG9yIG5vdCBhIHByb3BlcnR5IGhhcyBhbiBp
bmZlcnJlZCB0eXBlIGluIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlLCBhbmQgaXMgdXNlZCBmb3Ig
YSBmYXN0IGNoZWNrIGluIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgpLgogCiAgICAgUHJv
cGVydHlNYXBFbnRyeSgpCiAgICAgICAgIDoga2V5KG51bGxwdHIpCiAgICAgICAgICwgb2Zmc2V0
KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcygwKQorICAgICAgICAsIGhhc0lu
ZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTMsNiArOTYsNyBAQCBz
dHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBv
ZmZzZXQob2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAg
LCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQodGhpcy0+YXR0
cmlidXRlcyA9PSBhdHRyaWJ1dGVzKTsKICAgICB9CkBAIC0zMjMsNiArMzI3LDcgQEAgcHVibGlj
OgogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBQcm9w
ZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKTsK
KyAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpOwogCiAgICAgLy8gVGhpcyBpcyBhIHNvbWV3
aGF0IGludGVybmFsaXNoIG1ldGhvZC4gSXQgd2lsbCBjYWxsIHlvdXIgZnVuY3RvciB3aGlsZSBw
b3NzaWJseSBob2xkaW5nIHRoZQogICAgIC8vIFN0cnVjdHVyZSdzIGxvY2suIFRoZXJlIGlzIG5v
IGd1YXJhbnRlZSB3aGV0aGVyIHRoZSBsb2NrIGlzIGhlbGQgb3Igbm90IGluIGFueSBwYXJ0aWN1
bGFyCkBAIC00NzcsNiArNDgyLDQxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0cnVjdHVyZS0+
c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsKICAgICB9CiAK
KyAgICBib29sIGhhc0luZmVycmVkVHlwZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEhbV9pbmZlcnJlZFR5cGVUYWJsZTsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVy
cmVkVHlwZUZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgaWYgKElu
ZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpCisgICAg
ICAgICAgICByZXR1cm4gdGFibGUtPmdldCh1aWQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRGVzY3Jp
cHRvckZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgaWYgKEluZmVy
cmVkVHlwZSogcmVzdWx0ID0gaW5mZXJyZWRUeXBlRm9yKHVpZCkpCisgICAgICAgICAgICByZXR1
cm4gcmVzdXQtPmRlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9w
OworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHlwZSBvZiB0aGUgcHJvcGVy
dHkgaXMgc3RpbGwgdmFsaWQuCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxTdG9yZVZhbHVl
Rm9yVHJhbnNpdGlvbigKKyAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQorICAgIHsKKyAgICAgICAgaWYg
KGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRpbWl6ZSAmJiAhbV9pbmZlcnJlZFR5
cGVUYWJsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdpbGxTdG9yZVZhbHVlU2xv
dyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRh
YmxlOjpOZXdQcm9wZXJ0eSk7CisgICAgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3Rv
cmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7CisgICAgICAg
IGlmIChoYXNCZWVuRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3
aWxsU2xvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXpl
LCBJbmZlcnJlZFR5cGVUYWJsZTo6T2xkUHJvcGVydHkpOworICAgIH0KKwogICAgIFBhc3NSZWZQ
dHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSk7CiAgICAgCiAgICAg
Ly8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgbWF0Y2ggZW5vdWdoIHRoYXQgdGhp
cyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMKQEAgLTYyNyw2ICs2NjcsOSBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyhW
TSYpOwogCisgICAgdm9pZCB3aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgICAgIFZNJiwgUHJvcGVy
dHlPZmZzZXQsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCwgSW5mZXJyZWRUeXBlVGFibGU6
OlN0b3JlZFByb3BlcnR5QWdlKTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0
aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5n
dGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAtNjUwLDYgKzY5Myw4IEBAIHByaXZhdGU6
CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJp
bmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICBXcml0ZUJh
cnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCisgICAgV3JpdGVC
YXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOworCiAgICAgbXV0
YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAg
ICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxp
bmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvCiAK
IEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0g
ICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwotICAgIGlmICghcHJvcGVydHlUYWJs
ZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU1hcEVudHJ5
KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgIHJl
dHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlkT2Zmc2V0OworICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogfQogICAgIAog
QUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogeworICAgIGJvb2wg
aGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpCit7CiAgICAgQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZv
KCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAg
ICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7CisgICAgaGFzSW5mZXJyZWRUeXBlID0g
ZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261049</attachid>
            <date>2015-09-11 23:57:25 -0700</date>
            <delta_ts>2015-09-12 22:07:35 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>134889</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk1ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDMsNiArNzQ1LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTEzLDYgKzE5
MTksOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU2Nyw2ICsyNTc1LDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY0Myw4ICs0
NjU1LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00Njc4LDYgKzQ2OTAsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MjgsMTAgKzQ3
NDQsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDM1LDkgKzUwNTEs
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE4OSw2ICs1MjA1LDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzM2LDYgKzUzNTMsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTIyLDYgKzU5NDAsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDM1LDYg
KzYwNTQsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE5LDYgKzYzMzksNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ4NCw2ICs2
NTA1LDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQyNSw2ICs3NDQ3LDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4MzgsNiArNzg2MSw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0
cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICB9CiAgICAgCiAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7CkBAIC0xMDQsNyArMTA0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1h
dGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgc3RydWN0dXJlLCBuZXdT
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBuZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlw
ZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0xNjMsNyAr
MTY0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAg
ICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBz
dHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTE5NCw3ICsxOTUs
OCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAg
ICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmlu
ZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMDcsNyArMjA5LDggQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAg
ICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNj
ZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVp
ZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIApAQCAtMzMwLDggKzMzMywxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25l
IGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1
Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0K
KyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNl
dCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CkBAIC0zNTcsMTMgKzM2MiwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAgICAKICAgICAgICAgLy8gV2Ugb25seSBv
cHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRp
b24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHko
c3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAg
ICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAg
ICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9u
U2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVz
Y3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZp
c2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50
JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1f
bmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7
CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBtX3JlcXVpcmVkVHlwZSA9IG90
aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4o
Km90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVsc2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQ
dXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlz
OwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJl
c3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWly
ZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1
bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYgKzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5l
d1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9
IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NSw2ICs5MCw3IEBA
IFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
ICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7
CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwxMiBAQCBib29sIFB1dEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zm
c2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXF1aXJlZFR5cGUgIT0g
b3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBz
d2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFjZToKKyAgICBjYXNlIFJlcGxhY2U6IHsK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBSZXBsYWNlOiB7
CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2
ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBvdXQu
cHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgIjxS
ZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAi
LCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCksCisgICAgICAgICAgICAiPiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgb3V0
LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIp
OworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5cGUoKSwgIj4iKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODk1ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1YmxpYzoKICAgICBQdXRCeUlkVmFyaWFu
dChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBs
YWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0
QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIo
CiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9CiAKKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jl
cXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsK
ICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxs
cygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBt
X25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlv
blNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYs
NyArMzM2LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRh
aWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBhbnkgd2F0
Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBpbmNvcnJl
Y3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNo
ZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1cnJlbnRs
eSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNTdGls
bFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAvLyBpZiAo
IXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOworICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQsIGFuZCBz
b3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZlCisgICAg
Ly8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNlLCBpZiBm
aXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAvLyB0aGUg
Zmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVuIGl0IHdv
dWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRpb24gbGF0
ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBvZiBzdGF0
ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0aGUKKyAg
ICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dh
dGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRoZW4gdGhl
IERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJldHdlZW4g
dGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gd29y
ayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0aG91dCBh
IGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRoYXQgdGhl
IHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQgZG9lcyBp
dHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRoZSB3YXRj
aHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3YXkgb2Yg
dmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGUgREZH
IHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBpbnN0YWxs
ZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
aXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDkgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
cihUIG5vZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25SZXN1bHQg
ZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFk
bWl0dGVkVHlwZXMgPSBTcGVjTm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9y
Tm9kZShub2RlKSwgc2V0KTsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBz
ZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFs
dWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKICAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUp
OwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJv
emVuVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5NTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYg
KCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2Ji
ZXJlZCgpCisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAgICAgICAg
ICAgICAmJiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMg
PSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVlLm1fc3Ry
dWN0dXJlLnNldCgpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXSk7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBHZXRCeUlk
U3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1
cmUuc2V0KCksIHVpZCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBi
ZSAtIGlzIGl0IFRPUCwgYSBjb25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAgICAvLyBz
b21ldGhpbmcgbW9yZSBzdWJ0bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMu
IElmIGl0IGRpZCwgd2UnZAogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0
byBkbyBoZXJlLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUs
IHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0
YXR1c1tpXS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1
bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSwgdWlkLCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpID0gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtMTg4MCw3ICsxODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBz
aG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQm
IHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIgKzE4Nzcs
MjMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAv
LyB0aGF0IGluY2x1ZGVzIHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNv
dWxkIG1ha2UgdGhlIHN0cnVjdHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4g
V2UgY3VycmVudGx5IGRvbid0LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
Q2VsbFVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyOgorICAgICAgICAgICAgYWRtaXR0
ZWRUeXBlcyA9IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBz
ZXQpOworICAgICAgICAKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4NCwyOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAg
IGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3Jh
cGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5v
ZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEu
aWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMg
dGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5n
IHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90
IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAo
dXN1YWxseQorICAgICAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkg
Q1NFIGZvciBleGFtcGxlKSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJl
CisgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50
bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAg
ICAgLy8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4K
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5v
ZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAgIC8vIEl0
J3MgcG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0
aCBpcyBiZXR0ZXIuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAg
ICAgICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEtPmluZmVycmVkVHlwZSwgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBl
RnJvbVBhcnNpbmcpOworCisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMg
bm90IGV4aXN0IGFueSB2YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2Jh
Ymx5CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFs
aWRhdGVkLgorICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0
ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Cisg
ICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAs
NiArMjEzNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlz
IG5vZGUgaXMgRlRMLW9ubHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CiAgICAgICAgIAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJl
cl07CisKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVl
IHJlc3VsdDsKQEAgLTIxMjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRC
eU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhl
YXBUb3AoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNo
IChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6Q29uc3RhbnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNS
ZXN1bHQ7CisgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0
YW50KCksCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0g
ICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2Qo
KS5jb25zdGFudCgpLAotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpOwotICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAg
ICAgICBjYXNlIEdldEJ5T2ZmZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1
bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIGdldENhc2UubWV0aG9k
KCkub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkg
PT0gQ29udHJhZGljdGlvbikKQEAgLTIxNjMsNiArMjE5Miw4IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdW
YWx1ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07CkBAIC0yMTcwLDYgKzIyMDEsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAg
ICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1
ZTsKKyAgICAgICAgICAgIHRoaXNWYWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJl
ZFR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzdmFsdWUpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3Ry
dWN0dXJlKCkgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0yMTg1LDYgKzIyMjEsOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhj
bG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24p
CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBmb3Iobm9k
ZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEhb3JpZ2lu
YWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2NCwxMyAr
MjMwMywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
Y2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlm
ICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9i
YmVyZWQoKSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRp
b25WZWN0b3IgdHJhbnNpdGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBAQCB2b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZmlsdGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJl
U2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0gICAgaWYgKHZhbHVl
LmZpbHRlcihtX2dyYXBoLCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBpZiAodmFsdWUuZmls
dGVyKG1fZ3JhcGgsIHNldCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlvbk9LKQogICAgICAg
ICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAg
ICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw2ICsxMTcsNTYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFw
aAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQo
R3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpCb3R0b206CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHNl
dFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpJbnQzMjoKKyAgICAgICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmlu
ZzoKKyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgbWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAg
IHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3AoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBncmFwaCwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUgY2xvYmJlclN0YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgaWYg
KGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcygpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNl
bnRhdGlvbihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9k
ZSkKIHsKICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAt
MTg5LDggKzIzOSwyMiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShH
CiAgICAgcmV0dXJuIG9sZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3Ry
YWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIp
Citib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAgIEFic3RyYWN0VmFs
dWUgdHlwZVZhbHVlOworICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVycmVkVHlwZSk7CisK
KyAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAgbWVyZ2VkVmFsdWUu
bWVyZ2UodHlwZVZhbHVlKTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9PSB0eXBlVmFsdWU7
Cit9CisKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBo
JiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0
ZWRUeXBlcykKK3sKKyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAg
ICAKICAgICBpZiAoaXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAg
IApAQCAtMTk4LDcgKzI2Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKEcKICAgICAvLyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lm
aWMgdmFsdWUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwOTY2MwogICAgIAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1
cmVzKCk7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8
IGFkbWl0dGVkVHlwZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9t
U3RydWN0dXJlcygpOwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkBAIC0z
MTUsNiArMzc5LDEzIEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMK
ICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFj
dFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKKyAgICBm
aWx0ZXJWYWx1ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBmaWx0ZXIoZmls
dGVyVmFsdWUpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkK
IHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5NTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJE
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgpA
QCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1fdmFs
dWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9Ci0gICAg
CisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYp
OworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwg
U3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0
aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxwdHIpOwog
ICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwogICAgIApA
QCAtMjgwLDE3ICsyODQsMjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAg
ICAgcmV0dXJuICEobV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisKKyAgICBib29sIGlz
VHlwZShHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0OworCisg
ICAgLy8gRmlsdGVycyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElm
IHRoZSBhZG1pdHRlZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAgICAvLyBp
bXBsaWNpdGx5IGZpbHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBz
ZXQsIHdoaWNoIGFyZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwuIEhlbmNl
LCBhZnRlciB0aGlzIGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24t
Y2VsbCBtZW1iZXJzLiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBlcyB0byBw
cmVzZXJ2ZSBzb21lIG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBmb3IgYWRt
aXR0ZWRUeXBlcyB0byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRU
eXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1
ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
KGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdy
YXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgRmlsdHJh
dGlvblJlc3VsdCBjaGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICAKICAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIAorCiAgICAg
Ym9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlz
SGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsOSArMjA1
LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQg
cmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5j
dG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRP
cGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNr
c0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVl
KTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0g
R2V0QnlPZmZzZXQpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlw
ZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJlIHNldC4g
RG9lcyBub3QKICAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlvbiwgYnV0
IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJhZGljdGlv
bi4KQEAgLTIzMDMsNyArMjMwMiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0
YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBl
IG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlT
dG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxNCwxMyArMjMx
NSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7
CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIg
PSBpZGVudGlmaWVyTnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlw
ZTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhk
YXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwogCiAgICAg
cmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0
QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9m
ZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlLAor
ICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzEsNiArMjMzNSw3IEBAIE5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0
YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CisgICAg
ZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAgIE5vZGUqIHJlc3Vs
dCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdl
LCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ1LDcgKzI0NTAsOCBAQCBOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9h
ZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIGhh
bmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBt
ZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAor
ICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhv
ZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9t
IHBsYW5Mb2FkKCkuCkBAIC0yNTUxLDEzICsyNTU3LDEzIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICAK
KyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gYmFzZS0+
ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIG9w
dGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRo
IGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1
Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5j
b25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3Vs
ZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBX
ZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAgLy8gcHJv
cGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2Yg
dGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjIyLDkgKzI2MjgsMTYgQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQorCisgICAgICAg
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CisgICAgICAgIGlmIChuZWVk
U3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
OiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKQorICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZS5t
ZXJnZShtX2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpU
b3A7CiAgICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAot
ICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCksIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwg
aWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBsb2FkT3Ap
OwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2MzUsNyArMjY0OCw3IEBA
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxFQVNFX0FT
U0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBj
aGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0s
IHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVybiBoYW5k
bGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQu
b2Zmc2V0KCksIHZhcmlhbnQuaW5mZXJyZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODk1
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDYgKzQ0OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0
YXRlLmZvck5vZGUoY2hpbGQpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWVW
YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CiAKICAgICAgICAgICAgICAg
ICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0
aGlzIG5vZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAgICAgICAgICAgICAg
YWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFu
dCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCkBAIC00NjMsNyArNDY0LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBs
ZSgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAg
ICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubnVtVmFyaWFudHMoKSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID4gMSAmJiAhaXNG
VEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERG
R0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJJbmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBl
Y3RhdGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBp
dCB0byBoYXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9i
amVjdCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJl
ZEluZmVycmVkVHlwZSB7CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAg
ICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJ
bmZlcnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYgZXhwZWN0ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAs
IG1fZXhwZWN0ZWQoZXhwZWN0ZWQpCisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJl
ZFR5cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0
KG51bGxwdHIpCisgICAgICAgICwgbV9leHBlY3RlZChUb3ApCisgICAgeworICAgIH0KKworICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVjdCAmJiBtX2V4
cGVjdGVkOyB9CisKKyAgICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0OyB9CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9leHBlY3RlZDsgfQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVjdGVkKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25zdAorICAgIHsK
KyAgICAgICAgbV9vYmplY3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAg
ICAgICAgICAmJiBtX2V4cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFtX29iamVjdCAmJiBtX2V4cGVjdGVkID09IFRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRU
eXBlKj46Omhhc2gobV9vYmplY3QpICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKwor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3Rl
ZCwgY29udGV4dCksICIgZm9yICIsIFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJ
bkNvbnRleHQob3V0LCBjb250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRU
eXBlKiBtX29iamVjdDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsK
K307CisKK3N0cnVjdCBEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYg
YSwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVm
IEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJh
aXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZElu
ZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNiArNjUsMTEgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFw
dG9yOgogICAgIH0KIH0KIAordm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYg
Y29tbW9uKQoreworICAgIGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2sp
KTsKK30KKwogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERl
c2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5
OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorewor
ICAgIG1faW5mZXJyZWRUeXBlcy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3Ry
dWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJl
ZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRk
KGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50
czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVk
V2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJl
U3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgp
CiAgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFw
dGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRU
eXBlcy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApA
QCAtMTI3LDYgKzEzOSw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0
KFAKICAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2lu
ZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVy
IHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAg
IG91dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQo
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
IiAgICBJbmZlcnJlZCB0eXBlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4
dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlz
aW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVz
aXJlZEluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9u
LmgiCkBAIC05MSw2ICs5MiwxOCBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvCiAgICAgfQogfTsKIAorc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0
YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29t
bW9uRGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNp
cmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxs
VmFsaWQoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250
ZXh0KQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsK
KyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5h
bWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNz
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1
OSw2ICsxNzIsMTAgQEAgcHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Ug
ZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdo
aWNoIGRvZXMKICAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90
aGVyIGJvb2trZWVwaW5nLgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJik7CisKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNh
bGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9l
cworICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemlseShjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1
cmUqKTsKICAgICAKQEAgLTE4Niw2ICsyMDMsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KKyAg
ICBib29sIGlzV2F0Y2hlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KIAog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3LDcgQEAg
cHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJ
bmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2lu
dEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50
czxEZXNpcmVkSW5mZXJyZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlw
ZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Nyw2ICs4ODcs
NTAgQEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLAogICAgIHJldHVy
biBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9
CiAKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0
IFByb3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFzc2VydElzUmVnaXN0ZXJlZChrZXkuc3Ry
dWN0dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5mZXJyZWRUeXBlcy5nZXQoa2V5
KTsKKyAgICBpZiAoaXRlciAhPSBtX2luZmVycmVkVHlwZXMuZW5kKCkpCisgICAgICAgIHJldHVy
biBpdGVyLT52YWx1ZTsKKworICAgIEluZmVycmVkVHlwZSogdHlwZU9iamVjdCA9IGtleS5zdHJ1
Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGtleS51aWQoKSk7CisgICAgaWYgKCF0eXBlT2JqZWN0
KSB7CisgICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7
CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURlc2NyaXB0b3IgPSB0eXBlT2JqZWN0LT5kZXNjcmlwdG9y
KCk7CisgICAgaWYgKCF0eXBlRGVzY3JpcHRvci5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBt
X2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1
cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorICAgIAorICAgIG1faW5mZXJyZWRUeXBlcy5h
ZGQoa2V5LCB0eXBlRGVzY3JpcHRvcik7CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRk
TGF6aWx5KHR5cGVPYmplY3QpOworICAgIGlmICh0eXBlRGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkK
KyAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZURlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOwor
CisgICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJl
ZCBpbmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVjdHVyZXMgbWF5CisgICAgLy8g
cG9pbnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNlLgorICAgIG1fcGxhbi53YXRj
aHBvaW50cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVz
Y3JpcHRvcikpOworCisgICAgcmV0dXJuIHR5cGVEZXNjcmlwdG9yOworfQorCitib29sIEdyYXBo
Ojp3YXRjaERlc2lyZWRUeXBlKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKK3sKKyAg
ICBpZiAoIWtleS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkub2JqZWN0KCkpOworICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGtleS5leHBlY3RlZCgpLnN0cnVjdHVyZSgpKQorICAgICAg
ICByZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIG1fcGxhbi53YXRjaHBvaW50cy5h
ZGRMYXppbHkoa2V5KTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVz
c0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0
ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9i
eXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEwNjEsNyArMTEwNSw3IEBAIEpT
VmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRy
eUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBp
ZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICBp
ZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAgICAvLyBGSVhNRTogSWYgd2UganVz
dCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2UgY291bGQgZG8gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgcHJv
cGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDcyNzEKQEAgLTEwNzYsNiArMTEyMCwzNSBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25z
dGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS5t
X3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwogfQogCitBYnN0cmFjdFZhbHVlIEdy
YXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJl
clN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgIGJhc2UuZm9yRWFjaCgK
KyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNldCgqdGhpcywgaW5mZXJyZWRUeXBl
Rm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh2
YWx1ZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Fic3RyYWN0VmFs
dWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBBYnN0cmFjdFZh
bHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
CisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNW
YWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgeworICAg
ICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnNldCgqdGhpcywgKmZy
ZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJu
IGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShiYXNlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQsIGNs
b2JiZXJTdGF0ZSk7CisKKyAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQor
CiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBT
Y29wZU9mZnNldCBvZmZzZXQpCiB7CiAgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJy
ZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNl
ci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTU4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtNjc1LDYgKzY3NSwyMSBAQCBwdWJsaWM6CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25v
d24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0
IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25k
aXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KICAgICBib29sIGlzU2FmZVRv
TG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworCisgICAgLy8gVGVsbHMgdXMg
d2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBo
YXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Ig
aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJl
ZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgfQorCisgICAg
QWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJl
clN0YXRlKTsKKworICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29uc3RhbnQgcHJvcGVydHkgaW5m
ZXJlbmNlIG9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRlcml2ZSBhIGdvb2QgYWJzdHJh
Y3QKKyAgICAvLyB2YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nlc3NlZCB3aXRoIHRoZSBnaXZl
biBhYnN0cmFjdCB2YWx1ZSBiYXNlLgorICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZv
clByb3BlcnR5KAorICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAg
ICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAg
ICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwpA
QCAtODU2LDYgKzg3MSw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6
dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAg
ICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxzPj4gbV9i
eXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJvcGVydHlP
ZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CisgICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXksIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogICAgIERvbWluYXRvcnMgbV9k
b21pbmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5nOwogICAg
IE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbmZlcnJl
ZFR5cGVDaGVjay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRJ
bmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSogYmFzZU5vZGUsCisgICAgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZS5r
aW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG9yaWdp
bik7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgor
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVj
aywgb3JpZ2luLCBFZGdlKEJvb2xlYW5Vc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShPdGhlclVz
ZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkludDMyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNO
b25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKEludDMyVXNlLCBiYXNlTm9kZSkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdl
KE51bWJlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUlu
ZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShTdHJpbmdVc2UsIGJhc2VOb2RlKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3Ry
dWN0dXJlOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCisgICAgICAgICAgICBP
cEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJl
KCkpKSwKKyAgICAgICAgICAgIEVkZ2UoQ2VsbFVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbnNlcnRp
b25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpLAorICAgICAg
ICAgICAgRWRnZShDZWxsT3JPdGhlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShPYmplY3RV
c2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5k
ZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKE9iamVjdE9yT3RoZXJVc2UsIGJhc2VO
b2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWR0eXBlOjpUb3A6Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0goaW5zZXJ0aW9uU2V0LmdyYXBo
KCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJyZWRUeXBlQ2hlY2tfaAorI2Rl
ZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEluc2VydHMgYSB0eXBlIGNoZWNr
IHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2ZW4gaW5mZXJyZWQgdHlwZS4K
K3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5mZXJyZWRUeXBlQ2hlY2tfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTg5NTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0IFN0b3JhZ2VBY2Nlc3NE
YXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUgaW5mZXJyZWQgdHlwZS4g
Rm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byByZW1lbWJlcgor
ICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhpcyBpcyBuZWNlc3Nhcnkg
YmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlwZSBpcworICAgIC8vIGd1
YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKIH07
CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNkZWZpbmUgREZHUHJvcGVy
dHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIG9iamVj
dCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3BlcnR5J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9m
IFN0cnVjdHVyZSogYW5kIFVuaXF1ZWRTdHJpbmdJbXBsKi4KKworY2xhc3MgUHJvcGVydHlUeXBl
S2V5IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVR5cGVLZXkoKQorICAgICAgICA6IG1fc3RydWN0
dXJlKG51bGxwdHIpCisgICAgICAgICwgbV91aWQobnVsbHB0cikKKyAgICB7CisgICAgfQorCisg
ICAgUHJvcGVydHlUeXBlS2V5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQorICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3Vp
ZCh1aWQpCisgICAgeworICAgIH0KKworICAgIFByb3BlcnR5VHlwZUtleShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAg
LCBtX3VpZChkZWxldGVkVUlEKCkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSAmJiBtX3VpZDsgfQorCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAg
IFByb3BlcnR5T2Zmc2V0IHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQorICAgICAgICAg
ICAgJiYgbV91aWQgPT0gb3RoZXIubV91aWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1f
c3RydWN0dXJlKSArIFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlk
KTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV91aWQgPT0gZGVsZXRlZFVJRCgpOwor
ICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVt
cEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwgbV91aWQpOworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVt
cEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
VW5pcXVlZFN0cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7
CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIG1fdWlkOworfTsKKworc3RydWN0IFByb3BlcnR5VHlwZUtleUhhc2ggeworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KSB7IHJldHVy
biBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvcGVydHlUeXBl
S2V5JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpERkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6
OlByb3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg5
NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlYWxO
dW1iZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBDZWxsVXNl
OgorICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZToK
ICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzMiw2ICs1MjMyLDgwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSoKICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0
cnVjdHVyZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpCit7Cisg
ICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CisgICAgCisgICAgaWYgKG5v
ZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2Vs
bEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAg
ICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFyeT4gc3RydWN0dXJlOworICAgICAgICBH
UFJSZWcgc3RydWN0dXJlR1BSOworICAgICAgICAKKyAgICAgICAgaWYgKHRlbXBHUFIgPT0gSW52
YWxpZEdQUikgeworICAgICAgICAgICAgc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxHUFJU
ZW1wb3Jhcnk+KHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLT5n
cHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSB0ZW1wR1BS
OworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNl
bGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAg
ICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0g
MTsgKytpKSB7CisgICAgICAgICAgICBkb25lLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hXZWFrU3RydWN0dXIoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5v
ZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlR1BS
LCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNo
ZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0
cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbm9SZXN1
bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENlbGxPck90aGVy
VXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVn
cygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZVJlZ3MpOworICAg
ICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVlUmVncywgbm9kZS0+Y2hpbGQx
KCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RP
dGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIGNv
bXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1wR1BS
KTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG5vUmVzdWx0KHRoaXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2MzYsNiArNTcxMCwyMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2UgCiAgICAgKFNwZWN1bGF0ZUNl
bGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hl
Y2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1wR1BS
ID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gbV9qaXQuYnJh
bmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIs
CisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFuZC5qc1ZhbHVlUmVncygpLCB0
ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYwMDYsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBzcGVj
dWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxPck90aGVyVXNl
OgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMTUsNiArMjIxNSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mKE5vZGUq
KTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiwgR1BSUmVnIGNlbGxHUFIs
IEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKik7
CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VU
byhHUFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3Vs
YXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7
CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9y
T3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSk7CiAgICAgdm9pZCBz
cGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVk
Z2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgCisKICAgICAv
LyBJbiBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB2ZXJpZnkgd2hl
dGhlciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQsIGFuZAogICAgIC8vIGlmIG5vdCwgZW51
bWVyYXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMgb25seSBpbiBjYXNlcyB3aGVy
ZSB0aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBtZWFuaW5nZnVsbHkgc3BlY2lhbCwgbGlr
ZSBmb3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gbV9zZXQub25seVN0cnVjdHVyZSgp
OwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JF
YWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
IWlzVG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KICAgICAK
ICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2
ICs3OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBj
YXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnByaW50KCJLbm93bkNlbGwiKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgi
Q2VsbE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAg
ICAgICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYg
KzUxLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkJvb2xlYW5Vc2UsCiAgICAgQ2VsbFVz
ZSwKICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9yT3RoZXJVc2UsCiAgICAgT2JqZWN0VXNl
LAogICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2JqZWN0VXNlLApAQCAtMTA4LDYgKzEwOSw4
IEBAIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICBjYXNlIENl
bGxVc2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQ2VsbDsK
KyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGwgfCBTcGVj
T3RoZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVjT2JqZWN0Owog
ICAgIGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw2
ICs0MTgsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBD
ZWxsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAg
ICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RVc2U6
CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgICAgICAgICBjYXNl
IE9iamVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
MjYsMjEgKzIwMjYsNTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0
cnVjdHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKICAgICAgICAg
aWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBleGl0S2lu
ZCA9IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4aXRLaW5k
ID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291
dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKLSAg
ICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVJRCwganNWYWx1ZVZh
bHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAg
IFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
d2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKKworICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVz
ZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAg
ICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1Zh
bHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0
dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tT
dHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1
Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENh
c2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAorICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGpz
VmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0S2luZCwgbV9ub2RlLT5zdHJ1
Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25v
ZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOwor
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxsKCkKQEAgLTc1MDks
NiArNzU0NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
ZWxsT3JPdGhlclVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAg
ICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNzU4OSw2ICs3NjI3LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGxvd0Nl
bGwoZWRnZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRn
ZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90Q2Vs
bCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90aGVyIG5vdCBjZWxs
IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
bV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250
aW51YXRpb24pLCB1bnN1cmUoaXNOb3RDZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05vdENlbGwsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
IEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3Bl
Y090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVNYWNoaW5lSW50KEVkZ2UgZWRnZSkKICAg
ICB7CiAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJl
dmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNzAgQEAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4mIEFzc2VtYgogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOwogfQogCitBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RUeXBlKAorICAgIEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25z
dCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgp
KSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29s
ZWFuOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1w
R1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJy
YW5jaElmTm90TnVtYmVyKHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6U3RyaW5nOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChy
ZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXls
b2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShyZWdzLnBheWxv
YWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAg
ICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJy
YW5jaFN0cnVjdHVyZShyZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkp
OworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3Qo
cmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihy
ZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVn
cykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9h
ZEdQUigpKSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4o
RlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hE
b3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzE5
LDYgKzcxOSw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIEp1bXBMaXN0IGJyYW5j
aElmTm90VHlwZShKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEp1
bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRI
YW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNyArMzcxLDgg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAg
cHRyZGlmZl90IG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UgPSBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hl
ZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAmJiBNYWNyb0Fz
c2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRUb1BhdGNoZWRTdG9yYWdl
KQotICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSkgeworICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVycmVk
VHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJl
ZFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZSIs
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlKSB9OworCitJbmZlcnJlZFR5
cGUqIEluZmVycmVkVHlwZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJl
c3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkp
IEluZmVycmVkVHlwZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5m
ZXJyZWRUeXBlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZl
cnJlZFR5cGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8
SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisKKyAgICBpZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVy
ZSkKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKGluZmVycmVkVHlw
ZS0+bV9zdHJ1Y3R1cmUuZ2V0KCkpOworfQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpCisgICAgICAgIHJldHVybiBOdW1iZXI7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgp
KSB7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAo
Y2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGlm
IChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJlKCkp
OworICAgICAgICAgICAgcmV0dXJuIE9iamVjdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gVG9wOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6bWVyZ2UoY29uc3Qg
RGVzY3JpcHRvciYgb3RoZXIpCit7CisgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAg
ICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbjoK
KyAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBP
YmplY3Q6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIEludDMyOgorICAgICAgICBzd2l0
Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIG1f
a2luZCA9IE51bWJlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAg
IGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVj
dDoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgaWYgKG1f
c3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgKnRoaXMg
PSBvdGhlcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1f
a2luZCA9IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RP
ck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RP
ck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBj
YXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tp
bmQgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5k
KSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNh
c2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNh
c2UgVG9wOgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92ZVN0
cnVjdHVyZSgpCit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgKnRoaXMgPSBPYmplY3RP
ck90aGVyOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNvbnN0
IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAoreworICAgIERlc2NyaXB0b3IgbWVyZ2VkID0gKnRo
aXM7CisgICAgbWVyZ2VkLm1lcmdlKG90aGVyKTsKKyAgICByZXR1cm4gKnRoaXMgPT0gbWVyZ2Vk
OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9raW5kKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91dC5wcmludCgiOiIs
IGluQ29udGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1w
SW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRUeXBl
KFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQoKSkK
KyAgICAsIG1fd2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVycmVk
VHlwZTo6fkluZmVycmVkVHlwZSgpCit7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjppc1N0aWxs
VmFsaWQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9y
JiBleHBlY3RlZCkKK3sKKyAgICBpZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0gZXhw
ZWN0ZWQ7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgRGVzY3Jp
cHRvciYgZXhwZWN0ZWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICByZXR1cm4gaXNTdGlsbFZhbGlkKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2b2lk
IEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBs
b2NrZXIsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZGVz
Y3JpcHRvcihsb2NrZXIpLmtpbmQoKSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0LmFk
ZCh3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBkZXNjcmlwdG9yKCkpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIERlc2NyaXB0b3Ig
bXlUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBlID0g
RGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFsdWUpOworCisgICAgbXlUeXBlLm1lcmdlKG90aGVyVHlw
ZSk7CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRoZSB0
eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICBz
ZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BT
bG93KFZNJiB2bSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIHNldChsb2NrZXIsIHZtLCBUb3ApOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6c2V0KGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rl
c2NyaXB0b3IpCit7CisgICAgLy8gV2Ugd2lsbCB0cmlnZ2VyIHdyaXRlIGJhcnJpZXJzIHdoaWxl
IGhvbGRpbmcgb3VyIGxvY2suIEN1cnJlbnRseSwgd3JpdGUgYmFycmllcnMgZG9uJ3QgR0MsIGJ1
dCB0aGF0CisgICAgLy8gY291bGQgY2hhbmdlLiBJZiBpdCBkb2VzLCB3ZSBkb24ndCB3YW50IHRv
IGRlYWRsb2NrLiBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSB1c2VkCisgICAgLy8gR0NTYWZlQ29u
Y3VycmVudEpJVExvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlciBpcyBvbiBhIGZh
c3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCisgICAgLy8gYSBnb29kIGlkZWEuCisg
ICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIC8vIEJlIGRl
ZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2luZyB0aGUgdHlwZSwgdGhlbiB3ZSBk
b24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikgPT0g
bmV3RGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5ldyBkZXNjcmlw
dG9yIG11c3QgYmUgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4KKyAgICBBU1NF
UlQobmV3RGVzY3JpcHRvci5zdWJzdW1lcyhkZXNjcmlwdG9yKGxvY2tlcikpKTsKKworICAgIC8v
IElmIHRoZSBuZXcgZGVzY3JpcHRvcnMgaGF2ZSBkaWZmZXJlbnQgc3RydWN0dXJlcywgdGhlbiBp
dCBjYW4gb25seSBiZSBiZWNhdXNlIG9uZSBpcyBudWxsLgorICAgIGlmIChkZXNjcmlwdG9yKGxv
Y2tlcikuc3RydWN0dXJlKCkgIT0gbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAg
QVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgfHwgIW5ld0Rlc2NyaXB0b3Iu
c3RydWN0dXJlKCkpOworCisgICAgLy8gV2UgYXJlIGNoYW5naW5nIHRoZSB0eXBlLCBzbyBtYWtl
IHN1cmUgdGhhdCBpZiBhbnlvbmUgd2FzIHdhdGNoaW5nLCB0aGV5IGZpbmQgb3V0IGFib3V0IGl0
IG5vdy4gSWYKKyAgICAvLyBhbnlvbmUgaXMgd2F0Y2hpbmcsIHdlIG1ha2Ugc3VyZSB0byBnbyB0
byBUb3Agc28gdGhhdCB3ZSBkb24ndCBkbyB0aGlzIHNvcnQgb2YgdGhpbmcgYWdhaW4uCisgICAg
aWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IENsZWFyV2F0Y2hwb2ludCkgeworICAgICAg
ICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVuIGludmFsaWRhdGVkLCBzaW5jZSBpZiB3ZSB3ZXJlLCB0
aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBUb3AuCisgICAgICAgIEFTU0VSVChtX3dhdGNocG9pbnRT
ZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKKworICAgICAgICAvLyBXZSdyZSBhYm91dCB0
byBkbyBleHBlbnNpdmUgdGhpbmdzIGJlY2F1c2Ugc29tZSBjb21waWxlciB0aHJlYWQgZGVjaWRl
ZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5kCisgICAgICAgIC8vIHRoZW4gdGhlIHR5cGUgY2hhbmdl
ZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBjcmF6eSwgYW5kIGRvbid0IGV2ZXIgZG8g
YW55IG1vcmUgdGhpbmdzIGZvcgorICAgICAgICAvLyBpdC4KKyAgICAgICAgbmV3RGVzY3JpcHRv
ciA9IFRvcDsKKworICAgICAgICBtX3dhdGNocG9pbnRTZXQuZmlyZUFsbCgiSW5mZXJyZWQgdHlw
ZSBjaGFuZ2VkIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1
Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgIGlmICghbmV3RGVzY3Jp
cHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRyOworCisgICAg
Ly8gQWRkIGEgbmV3IEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBuZWVkIG9uZSBub3cu
CisgICAgaWYgKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpIHsKKyAgICAgICAgaWYgKG1fc3Ry
dWN0dXJlKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWdyZWUgb24gdGhlIHN0cnVjdHVy
ZXMgaWYgd2UgZ2V0IGhlcmUuCisgICAgICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZmVycmVkU3RydWN0
dXJlPih0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0Rl
c2NyaXB0b3Iuc3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KG1fc3RydWN0dXJl
LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVz
Y3JpcHRvciBraW5kLgorICAgIG1fa2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAg
Ly8gQXNzZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2Nr
ZXIpID09IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3Ry
dWN0dXJlKCkKK3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKKworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fcGFyZW50LT5tX2xvY2spOworICAgIAorICAg
IERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvciA9IGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICBuZXdE
ZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVyZSgpOworICAgIAorICAgIHNldChsb2NrZXIsIHZtLCBu
ZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJl
OjpJbmZlcnJlZFN0cnVjdHVyZShJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgcGFy
ZW50LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVj
dHVyZTo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKQoreworICAgIG1fcGFyZW50LT5y
ZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0
dXJlOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgVk0mIHZtID0gKkhlYXA6Omhl
YXAobV9wYXJlbnQpLT52bSgpOworCisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1fcGFyZW50
KSk7CisgICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCisg
ICAgICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAg
ICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgb3V0LnBy
aW50KCJPdGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Oklu
dDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAg
b3V0LnByaW50KCJTdHJpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhT
dHJ1Y3R1cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdDoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBvdXQucHJpbnQo
Ik9iamVjdE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpUb3A6CisgICAgICAgIG91dC5wcmludCgiVG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZl
cnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5mZGVmIEluZmVycmVkVHlwZV9o
CisjZGVmaW5lIEluZmVycmVkVHlwZV9oCisKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5o
IgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBh
biBvYmplY3QgdXNlZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHBy
b3BlcnRpZXMuCisKK2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRU
eXBlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIGVudW0gS2luZCA6IHVp
bnQ4X3QgeworICAgICAgICBCb3R0b20sCisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIE90aGVy
LAorICAgICAgICBJbnQzMiwKKyAgICAgICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcsCisgICAg
ICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmUsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyLAorICAgICAgICBPYmplY3QsCisgICAgICAgIE9iamVjdE9yT3RoZXIsCisgICAgICAgIFRv
cAorICAgIH07CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IERlc2NyaXB0b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQoQm90dG9tKQorICAgICAgICAgICAg
LCBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBE
ZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyKQorICAg
ICAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0
dXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBm
b3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBCb3R0b20gJiYgIW1f
c3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNW
YWx1ZShKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgICAgICAgICAgY2FzZSBCb3R0b206CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZS5pc0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAgICAg
ICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsK
KyAgICAgICAgICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5p
c1N0cmluZygpOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCkgPT0gbV9zdHJ1Y3R1cmU7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpCisgICAgICAgICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAgY2FzZSBPYmpl
Y3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgVG9w
OgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgICAgICYm
IG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6
UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNvbnN0
IERlc2NyaXB0b3ImKTsKKyAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFu
IHRoZSBvdGhlciBvbmUuCisgICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYp
IGNvbnN0OworCisgICAgICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgS2luZCBtX2tpbmQ7CisgICAgICAgIFN0cnVjdHVyZSog
bV9zdHJ1Y3R1cmU7CisgICAgfTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhy
ZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9z
dHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICB9Cisg
ICAgCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7Cisg
ICAgfQorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVzY3Jp
cHRvcihsb2NrZXIpOworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKCkua2luZCgpOyB9
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKCkuc3RydWN0dXJlKCk7IH0KKworICAgIGJv
b2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gVG9wOyB9CisgICAgYm9vbCBpc1Jl
bGV2YW50KCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9IFRvcDsgfQorCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0
b3JlLiBJdCdzIG5vdCByZWxldmFudCBpZiBpdCdzIFRvcC4KKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgd2lsbFN0b3JlVmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
RGVzY3JpcHRvciBjdXJyZW50RGVzY3JpcHRvciA9IGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7Cisg
ICAgICAgIGlmIChjdXJyZW50RGVzY3JpcHRvci5pbmNsdWRlc1ZhbHVlKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50RGVzY3JpcHRvci5raW5kKCkgIT0gVG9wOworICAgICAgICBy
ZXR1cm4gd2lsbFN0b3JlVmFsdWVTbG93KHZtLCB2YWx1ZSk7CisgICAgfQorCisgICAgLy8gSW1t
ZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGlycmVsZXZhbnQuCisgICAgdm9pZCBtYWtlVG9wKFZN
JiB2bSkKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtYWtlVG9wU2xvdyh2bSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IGl0IGN1cnJlbnRseSBtYWtlcyBzZW5zZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3Ig
dGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRoYXQKKyAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVy
biBmYWxzZSBmb3IgVG9wLgorICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJik7CisgICAgYm9vbCBjYW5XYXRjaChjb25z
dCBEZXNjcmlwdG9yJik7CisgICAgCisgICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hw
b2ludChXYXRjaHBvaW50Kik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7
CisKKyAgICB2b2lkIHdpbGxTdG9yZVZhbHVlU2xvdyhWTSYsIEpTVmFsdWUpOworICAgIHZvaWQg
bWFrZVRvcFNsb3coVk0mKTsKKyAgICB2b2lkIHNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgVk0mLCBEZXNjcmlwdG9yKTsKKyAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAg
bXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CisgICAgCisgICAgS2luZCBtX2tpbmQg
eyBCb3R0b20gfTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlIDogcHVibGljIFdhdGNo
cG9pbnQsIHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIEluZmVycmVkU3RydWN0dXJlKEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsK
KworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlLmdldCgpOyB9OworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5h
bChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEluZmVycmVk
VHlwZSogbV9wYXJlbnQ7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0
dXJlOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1f
c3RydWN0dXJlOworCisgICAgLy8gTk9URTogSWYgdGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3ZSB0
cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgaXQgd291bGRuJ3QgYmUK
KyAgICAvLyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWluLiBBbHNvLCB0aGlzIHNldCBpcyBp
bml0aWFsaXplZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIERGRworICAgIC8v
IHRocmVhZC4gVGhlIERGRyB3aWxsIHVzZSB0aGUgSW5mZXJyZWRUeXBlIGFzIHRoZSB0aGluZyB0
aGF0IGl0IHdhdGNoZXMuCisgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3dhdGNocG9pbnRTZXQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6SW5mZXJyZWRUeXBlOjpLaW5kKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZVRhYmxl
OjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGVUYWJsZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSW5mZXJyZWRUeXBlVGFibGUpIH07CisKK0luZmVycmVkVHlwZVRhYmxlKiBJbmZlcnJlZFR5
cGVUYWJsZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlVGFibGU+KHZtLmhlYXAp
KSBJbmZlcnJlZFR5cGVUYWJsZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRh
YmxlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKyAgICBpbmZlcnJl
ZFR5cGVUYWJsZS0+SW5mZXJyZWRUeXBlVGFibGU6On5JbmZlcnJlZFR5cGVUYWJsZSgpOworfQor
CitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0ganND
YXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIAorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3RhYmxlKSB7
CisgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXNSZWxldmFudCgpKQorICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJmVudHJ5LnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50
cnkudmFsdWUuY2xlYXIoKTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBl
VGFibGU6OmdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCit7CisgICAgYXV0byBpdGVyID0gbV90YWJsZS5maW5kKHVpZCk7CisgICAg
aWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgLy8gVGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHBydW5lIGludmFs
aWRhdGVkIHR5cGVzLgorICAgIGlmICghaXRlci0+dmFsdWUtPmlzUmVsZXZhbnQoKSkgeworICAg
ICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisKK0luZmVycmVkVHlwZSogSW5m
ZXJyZWRUeXBlVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGdldChsb2NrZXIsIHVp
ZCk7Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBnZXQocHJvcGVydHlOYW1lLnVpZCgpKTsK
K30KKworYm9vbCBJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUoCisgICAgVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBTdG9yZWRQcm9wZXJ0
eUFnZSBhZ2UpCit7CisgICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFj
dCB0aGF0IG9ubHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgCisgICAg
aWYgKGFnZSA9PSBPbGRQcm9wZXJ0eSkgeworICAgICAgICBUeXBlVGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90
YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3AuCisgICAgICAgIAorICAgICAgICBpZiAoaXRlci0+
dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgCisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBUeXBlVGFibGU6OkFkZFJlc3VsdCByZXN1bHQ7CisgICAg
eworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBy
ZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5
cGU+KCkpOworICAgIH0KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgSW5m
ZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7CisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuc2V0KHZtLCB0aGlzLCBpbmZlcnJlZFR5cGUpOworICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkK
K3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25s
eSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICBpZiAoYWdlID09IE9sZFBy
b3BlcnR5KSB7CisgICAgICAgIFR5cGVUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmlu
ZChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFp
dGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+
IHRvcC4KKworICAgICAgICBpdGVyLT52YWx1ZS0+bWFrZVRvcCgpOworICAgICAgICBpdGVyLT52
YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgVHlwZVRhYmxlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBl
PigpKTsKKyAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tYWtlVG9wKCk7CisgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpt
YWtlVG9wRm9yVHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlVGFibGVfaAorI2RlZmluZSBJbmZlcnJl
ZFR5cGVUYWJsZV9oCisKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlICJKU0Nl
bGwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdGFibGUgb2YgaW5mZXJyZWQgdHlwZXMg
Zm9yIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIGEgSlNDZWxsIGJlY2F1c2UgdGhhdCBzaW1wbGlm
aWVzIHRoZSBTdHJ1Y3R1cmUKKy8vIGRlc3RydWN0b3IgYW5kIG1ha2VzIGxpZmV0eXBlIGVhc2ll
ciB0byBtYW5hZ2UuIEZvciBleGFtcGxlLCBzaW5jZSBpdCdzIGEgY2VsbCwgd2Uga25vdyB0aGF0
IHRoaXMgdGhpbmcKKy8vIGNhbm5vdCBiZSBkZWxldGVkIHdoaWxlIHRoZSBERkcgaXMgcnVubmlu
Zy4gVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIFByb3BlcnR5VGFibGUgYmVjYXVzZSBtb3N0IHByb3Bl
cnRpZXMKKy8vIHdpbGwgbm90IGhhdmUgYW4gSW5mZXJyZWRUeXBlLCBzaW5jZSBtb3N0IHByb3Bl
cnRpZXMgYXJlIGluIGRpY3Rpb25hcmllcyAoaWYgeW91IHRoaW5rIG9mICJhIHByb3BlcnR5Igor
Ly8gYXMgYmVpbmcgImEgcHJvcGVydHkgaW4gc29tZSBTdHJ1Y3R1cmUiKS4gQWxzbywgdGhpcyB3
aWxsIGhhcHBpbHkgY29uZmxhdGUgdGhlIHR5cGVzIG9mIHByb3BlcnRpZXMgZnJvbQorLy8gZGlm
ZmVyZW50IHN0cnVjdHVyZXMgZXZlbiBpZiB0aGUgc3RydWN0dXJlcyByZXByZXNlbnQgZGlzam9p
bnQgc2V0cyBvZiBvYmplY3RzLgorCitjbGFzcyBJbmZlcnJlZFR5cGVUYWJsZSBmaW5hbCA6IHB1
YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBz
dGF0aWMgSW5mZXJyZWRUeXBlVGFibGUqIGNyZWF0ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOwor
CisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBi
b3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKKyAgICAvLyBvd25p
bmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHkuCisgICAgSW5mZXJy
ZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBs
Kik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZl
cnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUpOworCisgICAgZW51bSBTdG9yZWRQcm9wZXJ0eUFn
ZSB7CisgICAgICAgIE5ld1Byb3BlcnR5LAorICAgICAgICBPbGRQcm9wZXJ0eQorICAgIH07Cisg
ICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJv
cGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8v
IHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFs
bHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCisgICAgLy8gSW52YWxpZGF0
ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3Jl
IGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5
TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZVRh
YmxlKFZNJik7CisgICAgfkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICAvLyBCb3R0b206IGFi
c2VuY2UgZnJvbSB0YWJsZS4KKyAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1
ZS0+aXNSZWxldmFudCgpLCBvciBhYnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8KKyAgICAvLyBX
ZSBrbm93IGhvdyB0byBkZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0
b20gb3IgdG9wIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIC8vIHByb3BlcnR5IGlzIHBy
ZXNlbnQgaW4gdGhlIG93bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0
cnVjdHVyZSwgYWJzZW5jZSBtYXkgaGF2ZQorICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhl
IHdheSB0aGF0IHRoaXMgY2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBr
bm93cyBvZiB0aGUgcHJvcGVydHkKKyAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0
d2VlbiBhY3Rpb25zOiByZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5l
dyBwcm9wZXJ0eQorICAgIC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRv
bS4gSWYgd2UncmUgc3RvcmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSwgdGhl
bgorICAgIC8vIGFic2VuY2UgbWVhbnMgdG9wLiBUbyBtYWtlIHRoaXMgd29yaywgd2UgaGF2ZSB0
byB3YXRjaCBvdXQgZm9yIHRoZSBjYXNlIHdoZXJlIHR3byBzdHJ1Y3R1cmVzLCBTMSBhbmQKKyAg
ICAvLyBTMiwgc2hhcmUgdGhlIHNhbWUgSW5mZXJyZWRUeXBlVGFibGUgYW5kIG5laXRoZXIgb2Yg
dGhlbSBpbml0aWFsbHkga25vdyBhYm91dCBwcm9wZXJ0eSBQLiBTMSBtYXkKKyAgICAvLyB3YW50
IHRvIGFkZCBQIHdpdGhvdXQgYSB0eXBlLCB3aGlsZSBTMiBtYXkgd2FudCB0byBhZGQgUCB3aXRo
IGEgdHlwZS4gSWYgUzEgYWRkZWQgUCBhbmQgdXNlZCBhYnNlbmNlCisgICAgLy8gdG8gaW5kaWNh
dGUgVG9wLCB0aGVuIFMyIHdvdWxkIHVzZSB0aGF0IGFic2VuY2UgdG8gbWVhbiBCb3R0b20gYW5k
IHdvdWxkIGVuZCB1cCBjcmVhdGluZyBhIG5vbi1Ub3AKKyAgICAvLyBlbnRyeSBpbiB0aGUgdGFi
bGUuIFRoZW4gUzEgd291bGQgZm9yZ2V0IHRoYXQgaXQgd2FudGVkIFRvcCwgYW5kIHdvdWxkIHVz
ZSBTMidzIHR5cGUuIENsZWFybHksCisgICAgLy8gdGhhdCdzIGJhZC4gV2UgYXZvaWQgc3VjaCBj
b25mdXNpb24gYnkgZW5zdXJpbmcgdGhhdCBhIHRyYW5zaXRpb24gYWx3YXlzIGFkZHMgYW4gZW50
cnkuIEhlbmNlLAorICAgIC8vIGFic2VuY2UtbWVhbnMtYm90dG9tIG9ubHkgY29tZXMgaW50byBw
bGF5IGZvciBwcm9wZXJ0aWVzIGFkZGVkIGJlZm9yZSB0aGUgSW5mZXJyZWRUeXBlVGFibGUgd2Fz
CisgICAgLy8gY3JlYXRlZC4KKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJp
bmdJbXBsPiwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4sIElkZW50aWZpZXJSZXBIYXNoLCBI
YXNoVHJhaXRzPFVuaXF1ZWRTdHJpbmdJbXBsKj4+IFRhYmxlVHlwZTsKKyAgICAKKyAgICBUYWJs
ZVR5cGUgbV90YWJsZTsKKworICAgIC8vIFdlIG9ubHkgZ3JhYiB0aGlzIGxvY2sgd2hlbiB3ZSdy
ZSBkb2luZyBtb2RpZmljYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCwgb3IgcmVhZHMgb24gdGhl
IGNvbXBpbGVyCisgICAgLy8gdGhyZWFkLiBUaGUgY29tcGlsZXIgdGhyZWFkIGlzIG5vdCBhbGxv
d2VkIHRvIGRvIG1vZGlmaWNhdGlvbnMuCisgICAgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJsZV9o
CisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZp
c2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzExODksOCBAQCBpbmxpbmUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAog
ICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJp
YnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTEyMjgs
NiArMTIzMCw4IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRo
aXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0
cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZz
ZXQpKSB7CisgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRCeUlkKTsKKyAgICAg
ICAgCiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0
eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKQEAgLTEyNDQsMTIgKzEyNDgs
MTYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIH0KIAog
ICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICBib29sIGhhc0lu
ZmVycmVkVHlwZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKICAgICBpZiAob2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1
cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndp
bGxTdG9yZVZhbHVlRm9yUmVwbGFjZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250
ZXh0KCkgPT0gUHV0QnlJZCk7CisKICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRo
aXMsIG9mZnNldCk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAKQEAg
LTEyNjksNiArMTI3Nyw3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCgKICAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJl
ZFdhdGNocG9pbnRGaXJlOwogICAgIAogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
b2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOworICAgIHN0
cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRCeUlkKTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNl
dChvZmZzZXQpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NywxMSArMzQ3LDE1IEBAIHZvaWQgU3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBlbHNlCiAgICAgICAgIHByb3BlcnR5VGFi
bGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKIAorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBl
VGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworCiAgICAgZm9yIChzaXplX3QgaSA9
IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVy
ZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJl
LT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUt
PmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOworICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVU
YWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCisgICAgICAgICAg
ICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOwogICAgICAgICBwcm9wZXJ0eVRhYmxlKCkt
PmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5v
dENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNDYxLDYgKzQ2NSw3IEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVz
SW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OworICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0TWF5QmVOdWxsKHZt
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpOwogCiAg
ICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwogCkBAIC00NzYsNiArNDgxLDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXQKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogeworICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBzb21l
IGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRpcmVjdGx5IHRvIHVuY2FjaGVhYmxlIGRpY3Rp
b25hcnkgcmF0aGVyIHRoYW4KKyAgICAvLyBjYWNoaW5nIHRoZSByZW1vdmFsLiBXZSBjYW4gZml4
IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBtdXN0IHJlbWVtYmVyIHRvIGRvIHNvLCBpZiB3
ZSBldmVyIHRyeQorICAgIC8vIHRvIG9wdGltaXplIHRoaXMgY2FzZS4KKyAgICAvLworICAgIC8v
IC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkgc3RlYWwgdGhlIHByb3BlcnR5IHRhYmxlLCBh
bmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkKKyAgICAvLyAgIGNh
biBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxvb2tpbmcgYXQgcGFzdCB0cmFuc2l0aW9ucy4g
VGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFibGUgb25seQorICAgIC8vICAgZ3JldyBhbmQg
bmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92YWxzLCB3ZSdkIGhhdmUgdG8gY2hhbmdlIHRo
ZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRpb24KKyAgICAvLyAgIGNvZGUgdG8gaGFuZGxl
IGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dpYyB0byBnZXQgdGhlIGxpc3Qgb2YgcHJvcGVy
dGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0CisgICAgLy8gICBsYWNrcyBhIHByb3BlcnR5IHRhYmxl
IGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2ggdGhlIHNldCBvZiB0cmFuc2l0aW9ucyBzaW5j
ZSB0aGUgbGFzdAorICAgIC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEgcGlubmVkIHRhYmxlLiBU
aGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZSBjYWNoZWQK
KyAgICAvLyAgIHJlbW92YWxzLgorICAgIC8vCisgICAgLy8gLSBJbmZlcnJlZFR5cGVUYWJsZSBh
c3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIgaGFwcGVuZWQuIFRoaXMgaXMgaW1wb3J0YW50
IHNpbmNlIGlmIHdlIGNvdWxkCisgICAgLy8gICByZW1vdmUgYSBwcm9wZXJ0eSBhbmQgdGhlbiBy
ZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNlbmNlIG1lYW5zIHRvcCIgb3B0aW1pemF0aW9u
IHdvdWxkbid0CisgICAgLy8gICB3b3JrIGFueW1vcmUsIHVubGVzcyByZW1vdmFsIGFsc28gZWl0
aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChieSBkb2luZyBzb21ldGhpbmcgZXF1aXZhbGVu
dCB0bworICAgIC8vICAgaGFzQmVlbkRpY3Rpb25hcnkpIG9yIGJ5IHN0cm9uZ2x5IG1hcmtpbmcg
dGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0aGF0IGl0IGlzIG5vdCBhYnNlbnQsIGJ1dAor
ICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBlbnRyeS4KKyAgICAKICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSk7CkBAIC04MzgsNiArODYxLDQzIEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50
ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVlKTsKIH0KIAor
dm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygKKyAgICBWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUsCisg
ICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpOworICAgIEFTU0VSVCghaGFkQmVlbkRpY3Rpb25hcnkoKSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5cGUgdGFibGUgYmVmb3JlIGRvaW5nIGFueXRo
aW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0MgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5CisgICAg
Ly8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUgcHJvcGVydHkgbWFwLgorICAgIEluZmVycmVk
VHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisgICAgaWYgKCF0
YWJsZSkgeworICAgICAgICB0YWJsZSA9IEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUodm0pOwor
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVCYXJyaWVyKCk7CisgICAgICAgIG1faW5mZXJyZWRUeXBl
VGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBvbmx5IHdv
cmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgorICAgIFByb3BlcnR5VGFibGUqIHBy
b3BlcnR5VGFibGU7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBw
cm9wZXJ0eVRhYmxlKTsKKworICAgIC8vIFdlIG11c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhh
dmluZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMg
cHJlc2VudAorICAgIC8vIGFscmVhZHksIHNvIHdlIG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxl
IG5vdy4KKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyAuLi4gYW5kIHRoZSBw
cm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQuCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBw
cm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBBU1NFUlQoZW50cnkp
OworCisgICAgaWYgKHNob3VsZE9wdGltaXplKQorICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRU
eXBlID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2Up
OworICAgIGVsc2UgeworICAgICAgICB0YWJsZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lLCBh
Z2UpOworICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gZmFsc2U7CisgICAgfQorfQor
CiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogCiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRz
KiBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzID0gMDsKQEAgLTEwNTUsNiArMTExNSw4IEBAIHZv
aWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CiAgICAgfSBlbHNlIGlm
ICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3Qt
Pm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1faW5mZXJyZWRUeXBlVGFibGUpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhp
bmdUeXBlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC04
MSwxMSArODIsMTMgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0
cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhl
ciBvciBub3QgYSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQg
dHlwZSB0YWJsZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtl
eShudWxscHRyKQogICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0
dHJpYnV0ZXMoMCkKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAg
IH0KICAgICAKQEAgLTkzLDYgKzk2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAg
ICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRy
aWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAg
IHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAg
fQpAQCAtMzIzLDYgKzMyNyw3IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChW
TSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBl
KTsKIAogICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdp
bGwgY2FsbCB5b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBT
dHJ1Y3R1cmUncyBsb2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBp
cyBoZWxkIG9yIG5vdCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNDc3LDYgKzQ4Miw0MSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRp
ZXNJZk5lY2Vzc2FyeSh2bSk7CiAgICAgfQogCisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1faW5mZXJyZWRUeXBlVGFibGU7CisgICAg
fQorCisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3IoVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKKyAgICB7CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2lu
ZmVycmVkVHlwZVRhYmxlLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlLT5nZXQodWlk
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIGluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKKyAgICB7CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IGluZmVycmVkVHlw
ZUZvcih1aWQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3V0LT5kZXNjcmlwdG9yKCk7CisgICAg
ICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGlzIHN0aWxsIHZhbGlkLgorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRP
cHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICghc2hv
dWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNo
b3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6TmV3UHJvcGVydHkpOworICAgIH0KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAorICAgICAgICBW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFNsb3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6Ok9sZFByb3Bl
cnR5KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVy
ZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1
Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9j
YXRpb25zCkBAIC02MjcsNiArNjY3LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN0YXJ0
V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIHZvaWQgd2lsbFN0b3JlVmFs
dWVTbG93KAorICAgICAgICBWTSYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wsIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSk7CisKICAgICBz
dGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBj
b25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAK
QEAgLTY1MCw2ICs2OTMsOCBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0
aHJvdWdoIHByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkg
YW5vdGhlciB0aHJlYWQuCiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVy
dHlUYWJsZVVuc2FmZTsKIAorICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGVUYWJsZT4gbV9p
bmZlcnJlZFR5cGVUYWJsZTsKKwogICAgIG11dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3Ry
YW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0X2ZpdHMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNp
b24gMTg5NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxOSArNzUsMTkgQEAgaW5saW5lIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpzdG9yZWRQcm90bwogCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFi
bGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRh
YmxlKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zm
c2V0OwotCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQo
cHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDog
aW52YWxpZE9mZnNldDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5m
ZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
aGFzSW5mZXJyZWRUeXBlKTsKIH0KICAgICAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcykKIHsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4g
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5m
ZXJyZWRUeXBlKQorewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBB
U1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKQEAgLTEwMSw2ICsx
MDEsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgICAg
IHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1
dGVzOworICAgIGhhc0luZmVycmVkVHlwZSA9IGVudHJ5LT5oYXNJbmZlcnJlZFR5cGU7CiAgICAg
cmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261074</attachid>
            <date>2015-09-12 22:07:35 -0700</date>
            <delta_ts>2015-09-14 15:13:36 -0700</delta_ts>
            <desc>just a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>142912</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk1ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDMsNiArNzQ1LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTEzLDYgKzE5
MTksOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU2Nyw2ICsyNTc1LDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY0Myw4ICs0
NjU1LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00Njc4LDYgKzQ2OTAsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MjgsMTAgKzQ3
NDQsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDM1LDkgKzUwNTEs
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE4OSw2ICs1MjA1LDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzM2LDYgKzUzNTMsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTIyLDYgKzU5NDAsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDM1LDYg
KzYwNTQsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE5LDYgKzYzMzksNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ4NCw2ICs2
NTA1LDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQyNSw2ICs3NDQ3LDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4MzgsNiArNzg2MSw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0
cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICB9CiAgICAgCiAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSk7CkBAIC0xMDQsNyArMTA0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1h
dGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlv
bihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgc3RydWN0dXJlLCBuZXdT
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBuZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlw
ZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0xNjMsNyAr
MTY0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAg
ICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBz
dHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTE5NCw3ICsxOTUs
OCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAg
ICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmlu
ZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMDcsNyArMjA5LDggQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAg
ICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAg
ICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25T
ZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNj
ZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVp
ZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIApAQCAtMzMwLDggKzMzMywxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25l
IGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1
Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0K
KyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNl
dCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CkBAIC0zNTcsMTMgKzM2MiwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAgICAKICAgICAgICAgLy8gV2Ugb25seSBv
cHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRp
b24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHko
c3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAg
ICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAg
ICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwg
Y29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9u
U2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVz
Y3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZp
c2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50
JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1f
bmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7
CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBtX3JlcXVpcmVkVHlwZSA9IG90
aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAg
ICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4o
Km90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVsc2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQ
dXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlz
OwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlh
bnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJl
c3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWly
ZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRW
YXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1
bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYgKzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQg
UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5l
d1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9
IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NSw2ICs5MCw3IEBA
IFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
ICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7
CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwxMiBAQCBib29sIFB1dEJ5SWRWYXJpYW50
OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zm
c2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXF1aXJlZFR5cGUgIT0g
b3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBz
d2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFjZToKKyAgICBjYXNlIFJlcGxhY2U6IHsK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBSZXBsYWNlOiB7
CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2
ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBvdXQu
cHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgIjxS
ZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAi
LCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCksCisgICAgICAgICAgICAiPiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgb3V0
LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5Db250ZXh0
KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIp
OworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5cGUoKSwgIj4iKTsKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxODk1ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1YmxpYzoKICAgICBQdXRCeUlkVmFyaWFu
dChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBs
YWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0
QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3Ry
dWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIo
CiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9CiAKKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jl
cXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBjb25zdDsK
ICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFrZXNDYWxs
cygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBt
X25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlv
blNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3Rh
dHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYs
NyArMzM2LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRh
aWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBhbnkgd2F0
Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBpbmNvcnJl
Y3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNo
ZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1cnJlbnRs
eSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNTdGls
bFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAvLyBpZiAo
IXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOworICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQsIGFuZCBz
b3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZlCisgICAg
Ly8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNlLCBpZiBm
aXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAvLyB0aGUg
Zmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVuIGl0IHdv
dWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRpb24gbGF0
ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBvZiBzdGF0
ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0aGUKKyAg
ICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dh
dGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRoZW4gdGhl
IERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJldHdlZW4g
dGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gd29y
ayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0aG91dCBh
IGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRoYXQgdGhl
IHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQgZG9lcyBp
dHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRoZSB3YXRj
aHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3YXkgb2Yg
dmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGUgREZH
IHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBpbnN0YWxs
ZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
aXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDkgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
cihUIG5vZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25SZXN1bHQg
ZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFk
bWl0dGVkVHlwZXMgPSBTcGVjTm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9y
Tm9kZShub2RlKSwgc2V0KTsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBz
ZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFs
dWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKICAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUp
OwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJv
emVuVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5NTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYg
KCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2Ji
ZXJlZCgpCisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAgICAgICAg
ICAgICAmJiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMg
PSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVlLm1fc3Ry
dWN0dXJlLnNldCgpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXSk7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBHZXRCeUlk
U3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1
cmUuc2V0KCksIHVpZCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBi
ZSAtIGlzIGl0IFRPUCwgYSBjb25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAgICAvLyBz
b21ldGhpbmcgbW9yZSBzdWJ0bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMu
IElmIGl0IGRpZCwgd2UnZAogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0
byBkbyBoZXJlLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUs
IHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0
YXR1c1tpXS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1
bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSwgdWlkLCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpID0gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtMTg4MCw3ICsxODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBz
aG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQm
IHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIgKzE4Nzcs
MjMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAv
LyB0aGF0IGluY2x1ZGVzIHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNv
dWxkIG1ha2UgdGhlIHN0cnVjdHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4g
V2UgY3VycmVudGx5IGRvbid0LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
Q2VsbFVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyOgorICAgICAgICAgICAgYWRtaXR0
ZWRUeXBlcyA9IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBz
ZXQpOworICAgICAgICAKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4NCwyOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAg
IGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3Jh
cGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5v
ZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEu
aWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMg
dGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5n
IHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90
IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAo
dXN1YWxseQorICAgICAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkg
Q1NFIGZvciBleGFtcGxlKSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJl
CisgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50
bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAg
ICAgLy8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4K
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5v
ZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAgIC8vIEl0
J3MgcG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0
aCBpcyBiZXR0ZXIuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAg
ICAgICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEtPmluZmVycmVkVHlwZSwgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBl
RnJvbVBhcnNpbmcpOworCisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMg
bm90IGV4aXN0IGFueSB2YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2Jh
Ymx5CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFs
aWRhdGVkLgorICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0
ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7Cisg
ICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAs
NiArMjEzNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlz
IG5vZGUgaXMgRlRMLW9ubHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CiAgICAgICAgIAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5p
ZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJl
cl07CisKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVl
IHJlc3VsdDsKQEAgLTIxMjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRC
eU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhl
YXBUb3AoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNo
IChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6Q29uc3RhbnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNS
ZXN1bHQ7CisgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0
YW50KCksCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0g
ICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2Qo
KS5jb25zdGFudCgpLAotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpOwotICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAg
ICAgICBjYXNlIEdldEJ5T2ZmZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1
bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIGdldENhc2UubWV0aG9k
KCkub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkg
PT0gQ29udHJhZGljdGlvbikKQEAgLTIxNjMsNiArMjE5Miw4IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdW
YWx1ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07CkBAIC0yMTcwLDYgKzIyMDEsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAg
ICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1
ZTsKKyAgICAgICAgICAgIHRoaXNWYWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJl
ZFR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzdmFsdWUpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3Ry
dWN0dXJlKCkgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0yMTg1LDYgKzIyMjEsOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhj
bG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24p
CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBmb3Iobm9k
ZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEhb3JpZ2lu
YWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2NCwxMyAr
MjMwMywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
Y2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlm
ICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9i
YmVyZWQoKSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewog
ICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRp
b25WZWN0b3IgdHJhbnNpdGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBAQCB2b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZmlsdGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJl
U2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0gICAgaWYgKHZhbHVl
LmZpbHRlcihtX2dyYXBoLCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBpZiAodmFsdWUuZmls
dGVyKG1fZ3JhcGgsIHNldCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlvbk9LKQogICAgICAg
ICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAg
ICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw2ICsxMTcsNTYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFw
aAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQo
R3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpCb3R0b206CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHNl
dFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpJbnQzMjoKKyAgICAgICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNv
ZGVOdW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmlu
ZzoKKyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgbWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAg
IHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3AoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBncmFwaCwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUgY2xvYmJlclN0YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgaWYg
KGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcygpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNl
bnRhdGlvbihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9k
ZSkKIHsKICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAt
MTg5LDggKzIzOSwyMiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShH
CiAgICAgcmV0dXJuIG9sZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3Ry
YWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIp
Citib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAgIEFic3RyYWN0VmFs
dWUgdHlwZVZhbHVlOworICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVycmVkVHlwZSk7CisK
KyAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAgbWVyZ2VkVmFsdWUu
bWVyZ2UodHlwZVZhbHVlKTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9PSB0eXBlVmFsdWU7
Cit9CisKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBo
JiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0
ZWRUeXBlcykKK3sKKyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAg
ICAKICAgICBpZiAoaXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAg
IApAQCAtMTk4LDcgKzI2Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKEcKICAgICAvLyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lm
aWMgdmFsdWUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwOTY2MwogICAgIAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1
cmVzKCk7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8
IGFkbWl0dGVkVHlwZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9t
U3RydWN0dXJlcygpOwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkBAIC0z
MTUsNiArMzc5LDEzIEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMK
ICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFj
dFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKKyAgICBm
aWx0ZXJWYWx1ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBmaWx0ZXIoZmls
dGVyVmFsdWUpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkK
IHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5NTg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJE
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgpA
QCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1fdmFs
dWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9Ci0gICAg
CisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYp
OworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwg
U3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0
aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxwdHIpOwog
ICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwogICAgIApA
QCAtMjgwLDE3ICsyODQsMjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAg
ICAgcmV0dXJuICEobV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisKKyAgICBib29sIGlz
VHlwZShHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0OworCisg
ICAgLy8gRmlsdGVycyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElm
IHRoZSBhZG1pdHRlZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAgICAvLyBp
bXBsaWNpdGx5IGZpbHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBz
ZXQsIHdoaWNoIGFyZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwuIEhlbmNl
LCBhZnRlciB0aGlzIGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24t
Y2VsbCBtZW1iZXJzLiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBlcyB0byBw
cmVzZXJ2ZSBzb21lIG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBmb3IgYWRt
aXR0ZWRUeXBlcyB0byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRU
eXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1
ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
KGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdy
YXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgRmlsdHJh
dGlvblJlc3VsdCBjaGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICAKICAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIAorCiAgICAg
Ym9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlz
SGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsOSArMjA1
LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQg
cmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5j
dG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRP
cGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNr
c0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVl
KTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0g
R2V0QnlPZmZzZXQpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlw
ZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZVR5cGUg
PSBHZXRCeU9mZnNldCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJlIHNldC4g
RG9lcyBub3QKICAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlvbiwgYnV0
IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJhZGljdGlv
bi4KQEAgLTIzMDMsNyArMjMwMiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0
YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBl
IG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlT
dG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxNCwxMyArMjMx
NSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7
CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIg
PSBpZGVudGlmaWVyTnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlw
ZTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhk
YXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwogCiAgICAg
cmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0
QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9m
ZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlLAor
ICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzEsNiArMjMzNSw3IEBAIE5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0
YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQg
PSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CisgICAg
ZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAgIE5vZGUqIHJlc3Vs
dCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdl
LCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ1LDcgKzI0NTAsOCBAQCBOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9h
ZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIGhh
bmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBt
ZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAor
ICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhv
ZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9t
IHBsYW5Mb2FkKCkuCkBAIC0yNTUxLDEzICsyNTU3LDEzIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
Ojpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICAK
KyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gYmFzZS0+
ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIG9w
dGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRo
IGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1
Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5j
b25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3Vs
ZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBX
ZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAgLy8gcHJv
cGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2Yg
dGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjIyLDkgKzI2MjgsMTYgQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQorCisgICAgICAg
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CisgICAgICAgIGlmIChuZWVk
U3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
OiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKQorICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZS5t
ZXJnZShtX2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpU
b3A7CiAgICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAot
ICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCksIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwg
aWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBsb2FkT3Ap
OwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2MzUsNyArMjY0OCw3IEBA
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxFQVNFX0FT
U0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBj
aGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0s
IHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVybiBoYW5k
bGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQu
b2Zmc2V0KCksIHZhcmlhbnQuaW5mZXJyZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODk1
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2suaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRl
ICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdl
dEJ5SWRTdGF0dXMuaCIKQEAgLTQ0OCw2ICs0NDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlVmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOwogCiAgICAgICAgICAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBu
b2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAgICAgICAgICAgIGFscmVh
ZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9s
ZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgpAQCAtNDYzLDcgKzQ2NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RhdHVzLm51bVZhcmlhbnRzKCkpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+IDEgJiYgIWlzRlRMKG1f
Z3JhcGgubV9wbGFuLm1vZGUpKQpAQCAtNjY2LDYgKzY2OCw4IEBAIHByaXZhdGU6CiAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAogICAgICAgICBhZGRC
YXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpOworICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQzKCkubm9kZSgp
LCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3RhdGlvbiBmb3IgYW4g
SW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0byBoYXZlIGEgbGl2
ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVjdCBoYXMgdGhlIHR5
cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZEluZmVycmVkVHlwZSB7
CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAgIDogbV9vYmplY3Qo
bnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoSW5m
ZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZXhwZWN0
ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZXhwZWN0ZWQoZXhw
ZWN0ZWQpCisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAg
ICAgICwgbV9leHBlY3RlZChUb3ApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVjdCAmJiBtX2V4cGVjdGVkOyB9CisKKyAg
ICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9leHBl
Y3RlZDsgfQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVjdGVkKTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAgbV9vYmpl
Y3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAmJiBtX2V4
cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBt
X2V4cGVjdGVkID09IFRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBlKj46Omhhc2gobV9v
YmplY3QpICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKworICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwgY29udGV4dCksICIg
Zm9yICIsIFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBj
b250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKiBtX29iamVjdDsK
KyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKK307CisKK3N0cnVjdCBE
ZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwgY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlND
OjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpEZXNp
cmVkSW5mZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpE
ZXNpcmVkSW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVz
aXJlZEluZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
MTEgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOgogICAgIH0KIH0K
IAordm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAg
IGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwogRGVzaXJl
ZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRjaHBvaW50
czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5OCwxMSBAQCB2b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVy
ZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQoreworICAgIG1faW5mZXJyZWRU
eXBlcy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNp
ZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91
bGRXYXRjaCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpy
ZWFsbHlBZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ss
IGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29t
bW9uRGF0YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9j
aywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxseUFkZChjb2RlQmxvY2ss
IGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxp
ZCgpIGNvbnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFy
ZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAg
ICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1f
YnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1
cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRUeXBlcy5hcmVTdGlsbFZh
bGlkKCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApAQCAtMTI3LDYgKzEzOSw3
IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFAKICAgICBvdXQucHJp
bnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFsdWVzLCBj
b250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAiLCBpbkNv
bnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAg
IE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2ZVN0cnVj
dHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB0
eXBlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4dCksICJcbiIpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4OTU4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNp
bmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZEluZmVycmVkVHlw
ZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVy
Vmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCkBAIC05MSw2ICs5
MiwxOCBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvCiAgICAgfQog
fTsKIAorc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChD
b2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9uRGF0YSYpOworICAg
IHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsKKyAgICB9
CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBE
ZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAg
ICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKKyAgICB9Cit9OworCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNl
dFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1OSw2ICsxNzIsMTAgQEAg
cHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlz
IGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKICAgICAv
LyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5n
LgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisK
KyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3Rs
eS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9lcworICAgIC8vIHRoZSBy
ZXF1aXJlZCBHQyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKQEAg
LTE4Niw2ICsyMDMsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hl
ZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4g
bV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KIAogICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRh
cHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpT
QXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVm
ZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0
cnVjdHVyZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxEZXNpcmVkSW5mZXJy
ZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlwZXM7CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTIsNiArMTA5
Miw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9y
YWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldCwgbV9pbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+
Y2hpbGQzKCkubm9kZSgpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCkuaW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+
Y2hpbGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg3LDYg
Kzg4Nyw1MCBAQCBib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAg
cmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQp
KTsKIH0KIAorSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3Io
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCit7CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtl
eS5zdHJ1Y3R1cmUoKSk7CisgICAgCisgICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmdl
dChrZXkpOworICAgIGlmIChpdGVyICE9IG1faW5mZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIGl0ZXItPnZhbHVlOworCisgICAgSW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5
LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3Ioa2V5LnVpZCgpKTsKKyAgICBpZiAoIXR5cGVP
YmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6
VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKworICAgIElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVzY3JpcHRvciA9IHR5cGVPYmplY3QtPmRlc2Ny
aXB0b3IoKTsKKyAgICBpZiAoIXR5cGVEZXNjcmlwdG9yLmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAg
IHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZlcnJlZFR5
cGVzLmFkZChrZXksIHR5cGVEZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNl
cy5hZGRMYXppbHkodHlwZU9iamVjdCk7CisgICAgaWYgKHR5cGVEZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlRGVzY3JpcHRvci5zdHJ1Y3R1cmUo
KSk7CisKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhpcyBk
ZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkKKyAg
ICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9wbGFu
LndhdGNocG9pbnRzLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3QsIHR5
cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKK2Jvb2wg
R3JhcGg6OndhdGNoRGVzaXJlZFR5cGUoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQor
eworICAgIGlmICgha2V5LmlzU3RpbGxWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7CisgICAg
aWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ga2V5LmV4cGVjdGVkKCkuc3RydWN0dXJlKCkpCisg
ICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV9wbGFuLndhdGNocG9p
bnRzLmFkZExhemlseShrZXkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6Omxp
dmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29kZUJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTA2MSw3ICsxMTA1LDcg
QEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwogSlNWYWx1ZSBHcmFw
aDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewot
ICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgewor
ICAgIGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB3
ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1mb2xkIHRo
ZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTIwLDM1IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdl
dENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShi
YXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9CiAKK0Fic3RyYWN0VmFs
dWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBj
bG9iYmVyU3RhdGUpCit7CisgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgYmFzZS5mb3JF
YWNoKAorICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICAgICAgdmFsdWUuc2V0KCp0aGlzLCBpbmZlcnJl
ZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCkpOworICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKHZhbHVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJh
Y3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3Ry
YWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwKKyAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIGlm
IChKU1ZhbHVlIHZhbHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQpKSB7
CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0aGlz
LCAqZnJlZXplKHZhbHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAgICBy
ZXR1cm4gaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCksIHVp
ZCwgY2xvYmJlclN0YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9wKCk7
Cit9CisKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVlIGJh
c2UsIFNjb3BlT2Zmc2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21lIGNv
bmN1cnJlbmN5IHN0b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVDb2Rl
UGFyc2VyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTg5NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NzUsNiArNjc1LDIxIEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYgaXQn
cyBrbm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBv
ZmZzZXQgaXMgZmluZS4gVGhpcyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNo
IGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNT
YWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBUZWxs
cyB1cyB3aGF0IGluZmVycmVkIHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3BlcnR5
IHRvIGhhdmUgbm93IGFuZCBpbiB0aGUgZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciBpbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
ZmVycmVkVHlwZUZvcihQcm9wZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICB9CisK
KyAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUpOworCisgICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0
eSBpbmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBh
YnN0cmFjdAorICAgIC8vIHZhbHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhl
IGdpdmVuIGFic3RyYWN0IHZhbHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZh
bHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUp
OwogICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sq
KTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1l
Kik7CkBAIC04NTYsNiArODcxLDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNz
OwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+
PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9w
ZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtleSwg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9taW5hdG9y
cyBtX2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7
CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0lu
ZmVycmVkVHlwZUNoZWNrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGlu
c2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwKKyAg
ICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwg
b3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xl
YW46CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUs
IENoZWNrLCBvcmlnaW4sIEVkZ2UoQm9vbGVhblVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKE90
aGVyVXNlLCBiYXNlTm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6SW50MzI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwg
U3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoSW50MzJVc2UsIGJhc2VOb2RlKSk7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4s
IEVkZ2UoTnVtYmVyVXNlLCBiYXNlTm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShu
b2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKFN0cmluZ1VzZSwgYmFzZU5v
ZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAg
ICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1
Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShDZWxsVXNlLCBiYXNlTm9kZSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGlu
c2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSksCisg
ICAgICAgICAgICBFZGdlKENlbGxPck90aGVyVXNlLCBiYXNlTm9kZSkpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKE9i
amVjdFVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5v
ZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoT2JqZWN0T3JPdGhlclVzZSwg
YmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZHR5cGU6OlRv
cDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERGR19DUkFTSChpbnNlcnRpb25TZXQu
Z3JhcGgoKSwgYmFzZU5vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkdJbmZlcnJlZFR5cGVDaGVja19o
CisjZGVmaW5lIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gSW5zZXJ0cyBhIHR5cGUg
Y2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5vZGUgaGFzIHRoZSBnaXZlbiBpbmZlcnJlZCB0
eXBlLgordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRpb25TZXQmLCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIE5vZGUqIGJhc2VOb2RlLCBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbmZlcnJlZFR5cGVDaGVj
a19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODk1
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjQsNiArNjQsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2s7CiBzdHJ1Y3QgU3RvcmFnZUFj
Y2Vzc0RhdGEgewogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBrbm93IHRoZSBpbmZlcnJlZCB0
eXBlLiBGb3IgcHV0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVkIHRvIHJlbWVt
YmVyCisgICAgLy8gd2hhdCBjaGVjayBpcyBuZWVkZWQuIEZvciBnZXRzLCB0aGlzIGlzIG5lY2Vz
c2FyeSBiZWNhdXNlIG90aGVyd2lzZSBBSSBtaWdodCBmb3JnZXQgd2hhdCB0eXBlIGlzCisgICAg
Ly8gZ3VhcmFudGVlZC4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBl
OwogfTsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wZXJ0eVR5cGVLZXlfaAorI2RlZmluZSBERkdQ
cm9wZXJ0eVR5cGVLZXlfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMg
b2JqZWN0IGlzIGEga2V5IGZvciBmaW5kaW5nIGEgcHJvcGVydHkncyB0eXBlLiBJdCdzIGEgdHVw
bGUgb2YgU3RydWN0dXJlKiBhbmQgVW5pcXVlZFN0cmluZ0ltcGwqLgorCitjbGFzcyBQcm9wZXJ0
eVR5cGVLZXkgeworcHVibGljOgorICAgIFByb3BlcnR5VHlwZUtleSgpCisgICAgICAgIDogbV9z
dHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChudWxscHRyKQorICAgIHsKKyAgICB9
CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICAs
IG1fdWlkKHVpZCkKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAg
ICAgICAsIG1fdWlkKGRlbGV0ZWRVSUQoKSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlICYmIG1fdWlkOyB9CisK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9
CisgICAgUHJvcGVydHlPZmZzZXQgdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlCisgICAg
ICAgICAgICAmJiBtX3VpZCA9PSBvdGhlci5tX3VpZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhh
c2gobV9zdHJ1Y3R1cmUpICsgV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2go
bV91aWQpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX3VpZCA9PSBkZWxldGVkVUlE
KCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KHBvaW50
ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSwgIisiLCBtX3VpZCk7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBkdW1wSW5Db250ZXh0KG91dCwgY29udGV4dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBVbmlxdWVkU3RyaW5nSW1wbCogZGVsZXRlZFVJRCgpCisgICAgeworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KDEpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICBVbmlx
dWVkU3RyaW5nSW1wbCogbV91aWQ7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlUeXBlS2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm9wZXJ0
eVR5cGVLZXkmIGEsIGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHR5cGVk
ZWYgSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6
OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb3BlcnR5VHlwZUtleV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAxODk1ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
UmVhbE51bWJlclVzZToKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAgICBjYXNlIENl
bGxVc2U6CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0
VXNlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0
VXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMyLDYgKzUyMzIsODAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZihOb2RlKgogICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNo
ZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUsIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUikK
K3sKKyAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKKyAgICAKKyAgICBp
ZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
CisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BSVGVtcG9yYXJ5PiBzdHJ1Y3R1cmU7CisgICAg
ICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFI7CisgICAgICAgIAorICAgICAgICBpZiAodGVtcEdQUiA9
PSBJbnZhbGlkR1BSKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVl
PEdQUlRlbXBvcmFyeT4odGhpcyk7CisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1
cmUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHRl
bXBHUFI7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
KyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXpl
KCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKAorICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZUdQ
Uiwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtT
dHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1
cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAKKyAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgY29tcGlsZUNo
ZWNrU3RydWN0dXJlKG5vZGUsIGNlbGwuZ3ByKCksIEludmFsaWRHUFJSZWcpOworICAgICAgICBu
b1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQ2VsbE9y
T3RoZXJVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFs
dWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBjZWxsID0gbV9qaXQuYnJhbmNoSWZDZWxsKHZhbHVlUmVncyk7
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgdmFsdWVSZWdzLCBub2RlLT5j
aGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hJ
Zk5vdE90aGVyKHZhbHVlUmVncywgdGVtcEdQUikpOworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBjZWxsLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHRl
bXBHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgbm9SZXN1bHQodGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBERkdf
Q1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+dHJhbnNpdGlvbigpLT5w
cmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewpAQCAtNTYzNiw2ICs1NzEwLDIy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRnZSAKICAgICAoU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQodGhpcywgZWRnZSkpLmdwcigpOwogfQogCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5
cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBtX2pp
dC5icmFuY2hJZkNlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygpKTsKKyAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNP
dGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihvcGVyYW5kLmpzVmFsdWVSZWdz
KCksIHRlbXBHUFIpKTsKKyAgICBvay5saW5rKCZtX2ppdCk7Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKQEAgLTU5MTYsNiArNjAwNiw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAg
IHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbE9yT3Ro
ZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UpOwog
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxNSw2ICsyMjE1
LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUeXBlT2Yo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqLCBHUFJSZWcgY2Vs
bEdQUiwgR1BSUmVnIHRlbXBHUFIpOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5v
ZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsKICAgICB2b2lkIG1vdmVG
YWxzZVRvKEdQUlJlZyk7CkBAIC0yMzc0LDYgKzIzNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
cGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihF
ZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVD
ZWxsT3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdlKTsKICAgICB2
b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlRmluYWxPYmpl
Y3QoRWRnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVy
ZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLSAgICAKKwog
ICAgIC8vIEluIG1vc3QgY2FzZXMsIHdoYXQgeW91IHJlYWxseSB3YW50IHRvIGRvIGlzIHZlcmlm
eSB3aGV0aGVyIHRoZSBzZXQgaXMgdG9wIG9yIGNsb2JiZXJlZCwgYW5kCiAgICAgLy8gaWYgbm90
LCBlbnVtZXJhdGUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzLiBVc2UgdGhpcyBvbmx5IGluIGNhc2Vz
IHdoZXJlIHRoZSBzaW5nbGV0b24gY2FzZSBpcwogICAgIC8vIG1lYW5pbmdmdWxseSBzcGVjaWFs
LCBsaWtlIGZvciB0cmFuc2l0aW9ucy4KQEAgLTIwMiw2ICsyMDIsMTMgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBtX3NldC5vbmx5U3RydWN0
dXJlKCk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCghaXNUb3AoKSk7CisgICAgICAgIG1fc2V0LmZvckVhY2goZnVuY3Rvcik7CisgICAgfQog
ICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDYgKzc5LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZQog
ICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICBvdXQucHJpbnQoIktub3duQ2VsbCIpOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgb3V0LnBy
aW50KCJDZWxsT3JPdGhlciIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBPYmplY3RVc2U6
CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAxODk1ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtub3duQm9vbGVhblVzZSwKICAgICBD
ZWxsVXNlLAogICAgIEtub3duQ2VsbFVzZSwKKyAgICBDZWxsT3JPdGhlclVzZSwKICAgICBPYmpl
Y3RVc2UsCiAgICAgRnVuY3Rpb25Vc2UsCiAgICAgRmluYWxPYmplY3RVc2UsCkBAIC0xMDgsNiAr
MTA5LDggQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwogICAgIGNh
c2UgQ2VsbFVzZToKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgcmV0dXJuIFNwZWND
ZWxsOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjQ2VsbCB8
IFNwZWNPdGhlcjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNPYmpl
Y3Q7CiAgICAgY2FzZSBGdW5jdGlvblVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDE4LDYgKzQxOCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkK
ICAgICAgICAgICAgICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKICAgICAgICAgICAgICAgICBj
YXNlIENlbGxVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAg
ICAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgICAgICAgICBjYXNlIE9iamVj
dFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICAgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlclVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODk1ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAyNiwyMSArMjAyNiw1NiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUNo
ZWNrU3RydWN0dXJlKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCiAgICAgICAgIEV4aXRLaW5kIGV4aXRLaW5kOwogICAg
ICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGV4
aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZXhp
dEtpbmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9
IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAg
IAotICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAgICAgICAgIHN0cnVjdHVyZUlELCBqc1Zh
bHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAotICAgICAg
ICAgICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0pOworCisgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBD
ZWxsVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAorICAgICAg
ICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCks
IGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0S2luZCwgbV9ub2RlLT5z
dHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJl
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJl
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNlbGwgY2FzZSIpKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVj
a1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2Up
KTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhj
ZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCisgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUt
PnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGlu
dWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVl
KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoKQpAQCAt
NDAyMiw2ICs0MDU3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJs
b2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBl
eGl0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9
IGRhdGEudmFyaWFudHNbaV07CisKKyAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9k
ZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKQEAgLTU2NjksNiArNTcwNiwxMzQg
QEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CiAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOwogICAg
IH0KKworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAgICAgIC8v
IFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0
IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAgICAgICAvLworICAg
ICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8vCisgICAgICAgIC8v
IG1heSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgc3dpdGNoIChv
YmplY3QtPnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoKKyAgICAgICAgLy8g
ICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAgICAgLy8gICAgICAg
ICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgIGNhc2UgNDM6
CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7CisgICAg
ICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
ICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUg
ZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291
bGQgYmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0
eXBlMSB8IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5ib29sZWFu
VHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvb2xlYW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkp
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhl
cjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90
TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2Up
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2YodHlwZS5zdHJ1Y3R1cmUoKSkpIHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVh
bCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVy
ZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY2Vs
bCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVu
c3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIGlm
ICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHR5cGUuc3RydWN0
dXJlKCkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAg
ICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5s
b2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUgJiB+U3BlY0Nl
bGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6
CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBp
c05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJ
bmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJl
ZFR5cGUgT2JqZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVk
VHlwZSBPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSks
IHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAg
IHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBp
c05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJh
ZCBpbmZlcnJlZCB0eXBlIik7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb2FkUHJvcGVydHko
TFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKICAgICB7CkBAIC03NTA5LDYgKzc2NzQsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENlbGxVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEtub3duQ2VsbFVzZToKICAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5
cGVDaGVjayhlZGdlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc1ODksNiArNzc1NywyMiBA
QCBwcml2YXRlOgogICAgICAgICBsb3dDZWxsKGVkZ2UpOwogICAgIH0KICAgICAKKyAgICB2b2lk
IHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAg
ICAgICBMQmFzaWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1
bGF0ZSBDZWxsT3JPdGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgY29u
dGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2VsbCkpOwor
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RDZWxs
LCBjb250aW51YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc3BlY3VsYXRl
TWFjaGluZUludChFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIu
bmVlZHNUeXBlQ2hlY2soZWRnZSkpCkBAIC04MTIyLDYgKzgzMDYsOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9v
dXQuYm9vbGVhbkZhbHNlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIEFTU0VSVCht
X2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmluYWxpemVy
LT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUt
Pm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCkBAIC04MTMwLDkgKzgzMTcsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRz
KCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JF
eGl0Q29tcGlsYXRpb25JbmZvKCkpOwotICAgICAgICAKKwogICAgICAgICBPU1JFeGl0JiBleGl0
ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKIAorICAgICAgICBpZiAoZmFp
bENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuVHJ1ZSkgeworICAgICAgICAgICAgZW1pdE9TUkV4
aXRDYWxsKGV4aXQsIGxvd1ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODk1ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDYgKzU1LDcwIEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+JiBBc3NlbWIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorQXNz
ZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgK
KyAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExp
c3QgcmVzdWx0OworCisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEJvb2xlYW4ocmVncywgdGVtcEdQUikpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJl
cihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmlu
ZzoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3MucGF5bG9hZEdQUigpKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1
cmU6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUocmVncy5wYXlsb2FkR1BSKCksIGRlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJy
YW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUo
cmVncy5wYXlsb2FkR1BSKCksIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgb2su
bGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykp
OworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQ
UigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9y
T3RoZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChyZWdzLnBheWxvYWRHUFIoKSkpOworICAg
ICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cHVyaWZ5TmFOKEZQUlJlZyBmcHIpCiB7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gYnJhbmNoRG91YmxlKERvdWJsZUVx
dWFsLCBmcHIsIGZwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTU4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxOSw2ICs3MTksOCBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5cGUoSlNW
YWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVj
dHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkocmV2aXNpb24gMTg5NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw4IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZz
ZXRUb1BhdGNoZWRTdG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBD
YWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRy
QWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKLSAgICAgICAgICAg
ICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQu
aW1wbCgpKSkgewogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHJlcGF0Y2hCeUlk
U2VsZkFjY2VzcygKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0lu
Zm8gSW5mZXJyZWRUeXBlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZSkgfTsKKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5
cGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUo
dm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJ
bmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNl
bGwpOworICAgIGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Cit9
CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+
KGNlbGwpOworCisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZp
c2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJl
LmdldCgpKTsKK30KKworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvcjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNCb29s
ZWFuKCkpCisgICAgICAgIHJldHVybiBCb29sZWFuOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAg
ICAgICByZXR1cm4gTnVtYmVyOworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBK
U0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmlzU3RyaW5n
KCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAgICBpZiAoY2VsbC0+aXNPYmpl
Y3QoKSkgeworICAgICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXNjcmlw
dG9yKE9iamVjdFdpdGhTdHJ1Y3R1cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRvcDsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0b3ImIG90
aGVyKQoreworICAgIGlmICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0aGlzID0g
b3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2FzZSBTdHJp
bmc6CisgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdGhl
cjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAg
ICAgICAgbV9raW5kID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBOdW1iZXI7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhp
cyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgTnVtYmVy
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMg
PSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNh
c2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAg
ICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBv
dGhlci5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRoaXMgPSBP
YmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdE9y
T3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAg
ICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAg
ICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyOgorICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0T3JP
dGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBP
YmplY3RPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE90aGVyOgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBU
b3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIFRvcDoKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpyZW1vdmVTdHJ1Y3R1cmUoKQorewor
ICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAg
ICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAg
ICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jv
b2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9yJiBv
dGhlcikgY29uc3QKK3sKKyAgICBEZXNjcmlwdG9yIG1lcmdlZCA9ICp0aGlzOworICAgIG1lcmdl
ZC5tZXJnZShvdGhlcik7CisgICAgcmV0dXJuICp0aGlzID09IG1lcmdlZDsKK30KKwordm9pZCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7Cisg
ICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICBvdXQucHJpbnQoIjoiLCBpbkNvbnRleHQoKm1f
c3RydWN0dXJlLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IG51bGxwdHIpOworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZShWTSYgdm0pCisgICAg
OiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX3dhdGNo
cG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQoreworfQorCitJbmZlcnJlZFR5cGU6On5JbmZlcnJl
ZFR5cGUoKQoreworfQorCitib29sIEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7
CisgICAgaWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3ApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpID09IGV4cGVjdGVkOworfQorCiti
b29sIEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKGNvbnN0IERlc2NyaXB0b3ImIGV4cGVjdGVk
KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJu
IGlzU3RpbGxWYWxpZChsb2NrZXIsIGV4cGVjdGVkKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6
OmFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBv
aW50KiB3YXRjaHBvaW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGRlc2NyaXB0b3IobG9ja2Vy
KS5raW5kKCkgIT0gVG9wKTsKKworICAgIG1fd2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdhdGNo
cG9pbnQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBh
ZGRXYXRjaHBvaW50KGxvY2tlciwgd2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJhd1BvaW50
ZXIodGhpcyksICI6IiwgZGVzY3JpcHRvcigpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6Ondp
bGxTdG9yZVZhbHVlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBEZXNjcmlwdG9yIG15VHlwZSA9IGRlc2Ny
aXB0b3IobG9ja2VyKTsKKyAgICBEZXNjcmlwdG9yIG90aGVyVHlwZSA9IERlc2NyaXB0b3I6OmZv
clZhbHVlKHZhbHVlKTsKKworICAgIG15VHlwZS5tZXJnZShvdGhlclR5cGUpOworCisgICAgQVNT
RVJUKGRlc2NyaXB0b3IobG9ja2VyKSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUg
Y2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgc2V0KGxvY2tlciwgdm0s
IG15VHlwZSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0pCit7
CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2Vy
LCB2bSwgVG9wKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQorewor
ICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBs
b2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAorICAgIC8v
IGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90
ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5
YmUgdGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVyR0NGb3JB
V2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdl
J3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBk
byBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3Ip
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1v
cmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rlc2NyaXB0
b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUgbmV3IGRl
c2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUg
YmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVy
ZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCghZGVzY3Jp
cHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsK
KworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYg
YW55b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCisgICAg
Ly8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQg
d2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dhdGNocG9p
bnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90
IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVh
ZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0g
SXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZl
IHRoaW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhp
cyB0eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0
IHRoaXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5n
cyBmb3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAg
ICAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoIkluZmVycmVkIHR5cGUgY2hhbmdlZCIpOwor
ICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBp
ZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJl
KCkpCisgICAgICAgIG1fc3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgIC8vIEFkZCBhIG5ldyBJ
bmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgorICAgIGlmIChuZXdE
ZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBo
ZXJlLgorICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9z
dHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
c3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odGhpcywgbmV3
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9yLnN0cnVj
dHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChtX3N0cnVjdHVyZS5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4K
KyAgICBtX2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2VydCB0aGF0
IHdlIGRpZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNj
cmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCit7Cisg
ICAgVk0mIHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX3BhcmVudC0+bV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlwdG9yIG5l
d0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRvci5yZW1v
dmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcik7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1
Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
bV9wYXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJl
KQoreworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmZpcmVJbnRl
cm5hbChjb25zdCBGaXJlRGV0YWlsJikKK3sKKyAgICBtX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJl
KCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKQoreworICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fcGFyZW50KS0+
dm0oKTsKKworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudCkpOworICAgIAorICAg
IGlmICghSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICBtX3BhcmVu
dC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3Bh
Y2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEluZmVycmVkVHlwZTo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIG91dC5wcmlu
dCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9v
bGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT3RoZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAg
b3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIG91dC5wcmludCgiU3Ry
aW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAg
ICAgIG91dC5wcmludCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RPck90aGVy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAg
ICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luZmRlZiBJbmZlcnJlZFR5cGVfaAorI2RlZmluZSBJbmZl
cnJlZFR5cGVfaAorCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNsdWRlICJK
U0NlbGwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQg
Zm9yIHRoZSBpbmZlcmVuY2Ugb2YgdGhlIHR5cGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgorCitj
bGFzcyBJbmZlcnJlZFR5cGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEluZmVycmVkVHlwZSogY3JlYXRlKFZN
Jik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAg
ICAgQm90dG9tLAorICAgICAgICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50
MzIsCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRo
U3RydWN0dXJlLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAg
T2JqZWN0LAorICAgICAgICBPYmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisg
ICAgY2xhc3MgRGVzY3JpcHRvciB7CisgICAgcHVibGljOgorICAgICAgICBEZXNjcmlwdG9yKCkK
KyAgICAgICAgICAgIDogbV9raW5kKEJvdHRvbSkKKyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUo
bnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRGVzY3JpcHRvcihLaW5k
IGtpbmQsIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogbV9r
aW5kKGtpbmQpCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yVmFsdWUoSlNWYWx1
ZSk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gQm90dG9tICYmICFtX3N0cnVjdHVyZTsKKyAg
ICAgICAgfQorCisgICAgICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJl
OyB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFsdWUoSlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAg
ICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFu
KCk7CisgICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAgY2FzZSBOdW1iZXI6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7CisgICAgICAgICAgICBj
YXNlIFN0cmluZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3Ry
dWN0dXJlOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQorICAgICAgICAg
ICAgICAgICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpID09IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBPYmplY3RP
ck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
IHx8IHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIFRvcDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0
dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7
CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBtZXJnZShjb25zdCBEZXNjcmlwdG9yJik7
CisgICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb3RoZXIgb25l
LgorICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBjb25zdDsKKworICAg
ICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHByaXZhdGU6
CisgICAgICAgIEtpbmQgbV9raW5kOworICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwor
ICAgIH07CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jazsgfQorCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9z
dHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAgIERlc2Ny
aXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgIH0KKyAgICBEZXNj
cmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKTsK
KyAgICB9CisgICAgCisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcigpLmtpbmQoKTsgfQorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyBy
ZXR1cm4gZGVzY3JpcHRvcigpLnN0cnVjdHVyZSgpOyB9CisKKyAgICBib29sIGlzVG9wKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kID09IFRvcDsgfQorICAgIGJvb2wgaXNSZWxldmFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
SW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3Qg
cmVsZXZhbnQgaWYgaXQncyBUb3AuCisgICAgQUxXQVlTX0lOTElORSBib29sIHdpbGxTdG9yZVZh
bHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIERlc2NyaXB0b3IgY3Vy
cmVudERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgICAgICBpZiAoY3Vy
cmVudERlc2NyaXB0b3IuaW5jbHVkZXNWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
Y3VycmVudERlc2NyaXB0b3Iua2luZCgpICE9IFRvcDsKKyAgICAgICAgcmV0dXJuIHdpbGxTdG9y
ZVZhbHVlU2xvdyh2bSwgdmFsdWUpOworICAgIH0KKworICAgIC8vIEltbWVkaWF0ZWx5IG1ha2Vz
IHRoaXMgdHlwZSBpcnJlbGV2YW50LgorICAgIHZvaWQgbWFrZVRvcChWTSYgdm0pCisgICAgewor
ICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWFrZVRv
cFNsb3codm0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBjdXJyZW50bHkg
bWFrZXMgc2Vuc2UgdG8gd2F0Y2ggdGhpcyBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgZGVzY3JpcHRv
ci4gTm90ZSB0aGF0CisgICAgLy8gdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFRv
cC4KKyAgICBib29sIGNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
Y29uc3QgRGVzY3JpcHRvciYpOworICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYp
OworICAgIAorICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIFdhdGNocG9pbnQqKTsKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2lu
dCopOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgSW5mZXJyZWRUeXBlKFZNJik7CisgICAgfkluZmVycmVkVHlwZSgpOworCisgICAgdm9pZCB3
aWxsU3RvcmVWYWx1ZVNsb3coVk0mLCBKU1ZhbHVlKTsKKyAgICB2b2lkIG1ha2VUb3BTbG93KFZN
Jik7CisgICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgRGVzY3Jp
cHRvcik7CisgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgIG11dGFibGUgQ29uY3Vy
cmVudEpJVExvY2sgbV9sb2NrOworICAgIAorICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CisK
KyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSA6IHB1YmxpYyBXYXRjaHBvaW50LCBwdWJsaWMg
VW5jb25kaXRpb25hbEZpbmFsaXplciB7CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0
cnVjdHVyZShJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7CisKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfTsK
KworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURl
dGFpbCYpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkg
b3ZlcnJpZGU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBJbmZlcnJlZFR5cGUqIG1fcGFyZW50
OworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICB9Owor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKwor
ICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRv
cCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCisgICAgLy8gcHJvZml0
YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xl
YXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKKyAgICAvLyB0aHJlYWQuIFRoZSBE
Rkcgd2lsbCB1c2UgdGhlIEluZmVycmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVz
LgorICAgIElubGluZVdhdGNocG9pbnRTZXQgbV93YXRjaHBvaW50U2V0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkluZmVycmVkVHlwZTo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5m
ZXJyZWRUeXBlVGFibGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19pbmZvID0geyAi
SW5mZXJyZWRUeXBlVGFibGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlw
ZVRhYmxlKSB9OworCitJbmZlcnJlZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0
ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHJlc3VsdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZVRhYmxlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBl
VGFibGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IHN0YXRpY19j
YXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlVGFibGUtPklu
ZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKTsKK30KKworU3RydWN0dXJlKiBJ
bmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5
cGVUYWJsZSo+KGNlbGwpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90YWJsZSkgeworICAgICAgICBpZiAo
ZW50cnkudmFsdWUtPmlzUmVsZXZhbnQoKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZl
bnRyeS52YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LnZhbHVlLmNsZWFy
KCk7CisgICAgfQorfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQor
eworICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOworICAgIGlmIChpdGVyID09IG1f
dGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIC8vIFRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBlcy4K
KyAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAgaXRlci0+dmFs
dWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IGl0ZXItPnZhbHVlLmdldCgpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxl
OjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCB1aWQpOworfQorCitJbmZl
cnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Cit9CisKK2Jvb2wgSW5m
ZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKAorICAgIFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQorewor
ICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5IG9u
ZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIAorICAgIGlmIChhZ2UgPT0gT2xk
UHJvcGVydHkpIHsKKyAgICAgICAgVHlwZVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5m
aW5kKHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwg
IWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYnNlbmNlIG9uIHJl
cGxhY2UgPT4gdG9wLgorICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT53aWxsU3Rv
cmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAor
ICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgVHlwZVRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJs
ZS5hZGQocHJvcGVydHlOYW1lLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9
CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEluZmVycmVkVHlwZSogaW5m
ZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhp
cywgaW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3AoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgLy8gVGhl
IGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVhZCBt
b2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0eSkgeworICAg
ICAgICBUeXBlVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVydHlOYW1l
KTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisg
ICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3AuCisKKyAgICAg
ICAgaXRlci0+dmFsdWUtPm1ha2VUb3AoKTsKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIFR5cGVUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdGFibGUu
YWRkKHByb3BlcnR5TmFtZSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7CisgICAgaWYg
KCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRvcCgpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuY2xlYXIoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcEZvclRyYW5z
aXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlVGFibGVfaAor
CisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21lIHN0cnVj
dHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUgU3RydWN0
dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8gbWFuYWdlLiBG
b3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRoaW5nCisv
LyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMgaXMgc2Vw
YXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCisvLyB3aWxs
IG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFyZSBpbiBk
aWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFzIGJlaW5nICJh
IHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMgd2lsbCBoYXBwaWx5IGNv
bmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KKy8vIGRpZmZlcmVudCBzdHJ1Y3R1
cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pvaW50IHNldHMgb2Ygb2Jq
ZWN0cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEluZmVycmVk
VHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIENvbmN1cnJl
bnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisgICAgLy8gR2V0IHRoZSBj
dXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVsbHB0ciBmb3IgYm90aCBUb3AgYW5kIEJv
dHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCisgICAgLy8gb3duaW5nIFN0cnVjdHVyZSBk
b2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5LgorICAgIEluZmVycmVkVHlwZSogZ2V0KGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIEluZmVy
cmVkVHlwZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQo
UHJvcGVydHlOYW1lKTsKKworICAgIGVudW0gU3RvcmVkUHJvcGVydHlBZ2UgeworICAgICAgICBO
ZXdQcm9wZXJ0eSwKKyAgICAgICAgT2xkUHJvcGVydHkKKyAgICB9OworICAgIAorICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5IGlzIHN0aWxs
IHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QKKyAgICAvLyByZWxldmFudCBpZiBp
dCdzIFRvcC4gTm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5hbGx5IHBydW5lIFRvcCBl
bnRyaWVzLgorICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworICAgIC8vIEludmFsaWRhdGVzIHRoZSB0eXBlIGZv
ciB0aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9yZSBpbiBhIHJlZmxlY3Rp
dmUgY29udGV4dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0eU5hbWUsIFN0b3JlZFBy
b3BlcnR5QWdlKTsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGVUYWJsZShWTSYpOworICAg
IH5JbmZlcnJlZFR5cGVUYWJsZSgpOworCisgICAgLy8gQm90dG9tOiBhYnNlbmNlIGZyb20gdGFi
bGUuCisgICAgLy8gVG9wOiBudWxsIHZhbHVlIGluIHRhYmxlLCAhdmFsdWUtPmlzUmVsZXZhbnQo
KSwgb3IgYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vCisgICAgLy8gV2Uga25vdyBob3cgdG8g
ZGV0ZXJtaW5lIGlmIGFic2VuY2UgZnJvbSB0aGUgdGFibGUgaXMgYm90dG9tIG9yIHRvcCBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBv
d25pbmcgc3RydWN0dXJlLiBIZW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBzdHJ1Y3R1cmUsIGFic2Vu
Y2UgbWF5IGhhdmUKKyAgICAvLyBkaWZmZXJlbnQgbWVhbmluZ3MuIFRoZSB3YXkgdGhhdCB0aGlz
IGNsYXNzIGRldGVybWluZXMgaWYgdGhlIG93bmluZyBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhlIHBy
b3BlcnR5CisgICAgLy8gaXMgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYWN0aW9uczog
cmVwbGFjZSBvciB0cmFuc2l0aW9uLiBJZiB3ZSdyZSBhZGRpbmcgYSBuZXcgcHJvcGVydHkKKyAg
ICAvLyAodHJhbnNpdGlvbiksIHRoZW4gYWJzZW5jZSBtZWFucyBib3R0b20uIElmIHdlJ3JlIHN0
b3JpbmcgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkgKHJlcGxhY2UsIHRoZW4KKyAgICAvLyBhYnNl
bmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUgdG8gd2F0Y2ggb3V0IGZv
ciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCisgICAgLy8gUzIsIHNoYXJl
IHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9mIHRoZW0gaW5pdGlhbGx5
IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5CisgICAgLy8gd2FudCB0byBhZGQgUCB3aXRo
b3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0aCBhIHR5cGUuIElmIFMx
IGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAgIC8vIHRvIGluZGljYXRlIFRvcCwgdGhlbiBT
MiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFuZCB3b3VsZCBlbmQgdXAg
Y3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50cnkgaW4gdGhlIHRhYmxlLiBUaGVuIFMxIHdv
dWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1c2UgUzIncyB0eXBlLiBD
bGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2ggY29uZnVzaW9uIGJ5IGVu
c3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVudHJ5LiBIZW5jZSwKKyAg
ICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8gcGxheSBmb3IgcHJvcGVy
dGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdhcworICAgIC8vIGNyZWF0
ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFdyaXRl
QmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxVbmlx
dWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7CisgICAgCisgICAgVGFibGVUeXBlIG1fdGFibGU7
CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBsb2NrIHdoZW4gd2UncmUgZG9pbmcgbW9kaWZp
Y2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9yIHJlYWRzIG9uIHRoZSBjb21waWxlcgorICAg
IC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVhZCBpcyBub3QgYWxsb3dlZCB0byBkbyBtb2Rp
ZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlVGFibGVfaAorCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTg5NTg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0p
OwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgIEFTU0VSVCgh
c3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKICAgICAgICAgdW5zaWdu
ZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAg
ICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBAIC0xMjI4LDYgKzEyMzAsOCBAQCBp
bmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+
c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgeworICAgICAg
ICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7CisgICAgICAgIAogICAgICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMjQ0LDEyICsxMjQ4LDE2IEBAIGlubGluZSBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICB9CiAKICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7Cisg
ICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJp
YnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0
KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRl
cyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHN0cnVj
dHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VMWSho
YXNJbmZlcnJlZFR5cGUpKQorICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZv
clJlcGxhY2Uodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dEJ5
SWQpOworCiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwog
ICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCkBAIC0xMjY5LDYgKzEyNzcs
NyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgRGVmZXJy
ZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50Rmly
ZTsKICAgICAKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5j
b250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBzdHJ1Y3R1cmUtPndpbGxT
dG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250
ZXh0KCkgPT0gUHV0QnlJZCk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAg
ICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODk1ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDcsMTEgKzM0NywxNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0
aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZl
cnJlZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNp
emUoKTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2
aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5Q
cmV2aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1
Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQorICAgICAgICAgICAgZW50cnkuaGFzSW5m
ZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1f
b2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAg
IH0KICAgICAKQEAgLTQ2MSw2ICs0NjUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0
cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwog
ICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKKyAgICB0cmFu
c2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRy
YW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtNDc2LDYg
KzQ4MSwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAKIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZz
ZXQmIG9mZnNldCkKIHsKKyAgICAvLyBOT1RFOiBUaGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMg
d2h5IHRoaXMgZ29lcyBkaXJlY3RseSB0byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IHJhdGhlciB0
aGFuCisgICAgLy8gY2FjaGluZyB0aGUgcmVtb3ZhbC4gV2UgY2FuIGZpeCBhbGwgb2YgdGhlc2Ug
dGhpbmdzLCBidXQgd2UgbXVzdCByZW1lbWJlciB0byBkbyBzbywgaWYgd2UgZXZlciB0cnkKKyAg
ICAvLyB0byBvcHRpbWl6ZSB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAtIENhY2hlZCB0cmFu
c2l0aW9ucyB1c3VhbGx5IHN0ZWFsIHRoZSBwcm9wZXJ0eSB0YWJsZSwgYW5kIGFzc3VtZSB0aGF0
IHRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGV5CisgICAgLy8gICBjYW4ganVzdCByZWJ1aWxk
IHRoZSB0YWJsZSBieSBsb29raW5nIGF0IHBhc3QgdHJhbnNpdGlvbnMuIFRoYXQgY29kZSBhc3N1
bWVzIHRoYXQgdGhlIHRhYmxlIG9ubHkKKyAgICAvLyAgIGdyZXcgYW5kIG5ldmVyIHNocmFuay4g
VG8gc3VwcG9ydCByZW1vdmFscywgd2UnZCBoYXZlIHRvIGNoYW5nZSB0aGUgcHJvcGVydHkgdGFi
bGUgbWF0ZXJpYWxpemF0aW9uCisgICAgLy8gICBjb2RlIHRvIGhhbmRsZSBkZWxldGlvbnMuIEFs
c28sIHdlIGhhdmUgbG9naWMgdG8gZ2V0IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgb24gYSBzdHJ1
Y3R1cmUgdGhhdAorICAgIC8vICAgbGFja3MgYSBwcm9wZXJ0eSB0YWJsZSBieSBqdXN0IGxvb2tp
bmcgYmFjayB0aHJvdWdoIHRoZSBzZXQgb2YgdHJhbnNpdGlvbnMgc2luY2UgdGhlIGxhc3QKKyAg
ICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBpbm5lZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3Vs
ZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBoYW5kbGUgY2FjaGVkCisgICAgLy8gICByZW1v
dmFscy4KKyAgICAvLworICAgIC8vIC0gSW5mZXJyZWRUeXBlVGFibGUgYXNzdW1lcyB0aGF0IHJl
bW92YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSBpZiB3ZSBj
b3VsZAorICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVydHkgYW5kIHRoZW4gcmUtYWRkIGl0IGxhdGVy
LCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3AiIG9wdGltaXphdGlvbiB3b3VsZG4ndAorICAg
IC8vICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVtb3ZhbCBhbHNvIGVpdGhlciBwb2lzb25lZCB0
eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRoaW5nIGVxdWl2YWxlbnQgdG8KKyAgICAvLyAg
IGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJvbmdseSBtYXJraW5nIHRoZSBlbnRyeSBhcyBU
b3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QgYWJzZW50LCBidXQKKyAgICAvLyAgIGluc3Rl
YWQsIGhhcyBhIG51bGwgZW50cnkuCisgICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9V
bmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtODM4LDYg
Kzg2MSw0MyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvCiAgICAg
c2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJl
Ojp3aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplLAorICAgIEluZmVycmVkVHlw
ZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0
aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5m
bygpKTsKKyAgICBBU1NFUlQoIWhhZEJlZW5EaWN0aW9uYXJ5KCkpOworCisgICAgLy8gQ3JlYXRl
IHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBzbyB0
aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQorICAgIC8vIGdyYWJiZWQgYSBw
b2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFi
bGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgIGlmICghdGFibGUpIHsKKyAgICAg
ICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpz
dG9yZVN0b3JlQmFycmllcigpOworICAgICAgICBtX2luZmVycmVkVHlwZVRhYmxlLnNldCh2bSwg
dGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBn
b3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwor
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7
CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0
aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKKyAgICAv
LyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCisgICAgQVNT
RVJUKHByb3BlcnR5VGFibGUpOworCisgICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBi
ZSBwcmVzZW50LgorICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+
Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIGlmIChz
aG91bGRPcHRpbWl6ZSkKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53
aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSwgYWdlKTsKKyAgICAgICAg
ZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOworICAgIH0KK30KKwogI2lmIERVTVBfUFJP
UEVSVFlNQVBfU1RBVFMKIAogUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBI
YXNoVGFibGVTdGF0cyA9IDA7CkBAIC0xMDU1LDYgKzExMTUsOCBAQCB2b2lkIFN0cnVjdHVyZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUuY2xlYXIoKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2lu
ZmVycmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5
SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg5
NTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNs
dWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2lu
Y2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgpAQCAtODEsMTEgKzgyLDEzIEBA
IHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5Owog
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7CisgICAg
Ym9vbCBoYXNJbmZlcnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEgcHJv
cGVydHkgaGFzIGFuIGluZmVycmVkIHR5cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUsIGFu
ZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFs
KCkuCiAKICAgICBQcm9wZXJ0eU1hcEVudHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikKICAg
ICAgICAgLCBvZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDApCisg
ICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05
Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXkoa2V5
KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1
dGVzKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAgIEFT
U0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTMyMyw2ICsz
MjcsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5h
bWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQm
IGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAvLyBU
aGlzIGlzIGEgc29tZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91ciBm
dW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3MgbG9j
ay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBub3Qg
aW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ3Nyw2ICs0ODIsNDEgQEAgcHVibGljOgogICAgICAgICAg
ICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnko
dm0pOwogICAgIH0KIAorICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISFtX2luZmVycmVkVHlwZVRhYmxlOworICAgIH0KKworICAgIEluZmVy
cmVkVHlwZSogaW5mZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgewor
ICAgICAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJs
ZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS0+Z2V0KHVpZCk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZl
cnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAg
ICAgICBpZiAoSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBpbmZlcnJlZFR5cGVGb3IodWlkKSkKKyAg
ICAgICAgICAgIHJldHVybiByZXN1dC0+ZGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4gSW5m
ZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0eXBl
IG9mIHRoZSBwcm9wZXJ0eSBpcyBzdGlsbCB2YWxpZC4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAg
eworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAoIXNob3VsZE9wdGltaXplICYm
ICFtX2luZmVycmVkVHlwZVRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2ls
bFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwg
SW5mZXJyZWRUeXBlVGFibGU6Ok5ld1Byb3BlcnR5KTsKKyAgICB9CisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAgICAgVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQor
ICAgIHsKKyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHdpbGxTbG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpPbGRQcm9wZXJ0eSk7CisgICAgfQor
CiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVl
KTsKICAgICAKICAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc3RydWN0dXJlcyBtYXRjaCBl
bm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBhbGxvY2F0aW9ucwpAQCAtNjI3
LDYgKzY2Nyw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJu
YWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAgICB2b2lkIHdpbGxTdG9yZVZhbHVlU2xvdygKKyAgICAg
ICAgVk0mLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sLCBJbmZl
cnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOworCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4
VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCkBAIC02NTAsNiArNjkz
LDggQEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9wZXJ0
eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFk
LgogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7
CiAKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFibGU+IG1faW5mZXJyZWRUeXBlVGFi
bGU7CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hw
b2ludFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2
LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTU4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsMTkgKzc1LDE5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
c3RvcmVkUHJvdG8KIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6Omdl
dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQVNTRVJUKCFpc0Nv
bXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkg
PT0gaW5mbygpKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0gICAgaWYg
KCFwcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFBy
b3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51
aWQoKSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7
CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAg
ICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlw
ZSk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMp
CiB7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworfQorCitBTFdBWVNfSU5MSU5F
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSkKK3sK
ICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCkBAIC0xMDEsNiArMTAxLDcgQEAgQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgICAgICByZXR1cm4gaW52YWxp
ZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKKyAgICBoYXNJ
bmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlOwogICAgIHJldHVybiBlbnRyeS0+
b2Zmc2V0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261136</attachid>
            <date>2015-09-14 15:13:36 -0700</date>
            <delta_ts>2015-09-14 18:47:47 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>142813</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk3NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDUsNiArNzQ3LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE1LDYgKzE5
MjEsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3MSw2ICsyNTc5LDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY0Nyw4ICs0
NjU5LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00NjgyLDYgKzQ2OTQsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MzIsMTAgKzQ3
NDgsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDM5LDkgKzUwNTUs
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE5Myw2ICs1MjA5LDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzQwLDYgKzUzNTcsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTI4LDYgKzU5NDYsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDQxLDYg
KzYwNjAsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI1LDYgKzYzNDUsNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5MCw2ICs2
NTExLDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQzMiw2ICs3NDU0LDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4NDYsNiArNzg2OSw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5NzUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE4OTc1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0
cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICB9CiAKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChu
ZXdTdHJ1Y3R1cmVJRCk7CkBAIC0xMDMsNyArMTAzLDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJh
bnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwor
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgc3RydWN0dXJl
LCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBuZXdTdHJ1Y3R1cmUtPmluZmVy
cmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBt
YXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0x
NjIsNyArMTYzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwog
ICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsK
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAg
ICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTE5Myw3
ICsxOTQsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAg
ICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7
Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1
cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yMDYsNyArMjA4LDggQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAg
IGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAg
ICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAg
ICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25k
aXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUo
KSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9y
Rm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIApAQCAtMzI5LDggKzMzMiwxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlz
IGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJp
YW50ID0KKyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUs
IG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CkBAIC0zNTYsMTMgKzM2MSwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAgICAKICAgICAgICAgLy8gV2Ug
b25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRy
YW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJy
ZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7
CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQp
KTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgK
LSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNp
dGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29u
ZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+aW5mZXJyZWRU
eXBlRGVzY3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
CShyZXZpc2lvbiAxODk3NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFB1dEJ5SWRW
YXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9IG90
aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRp
b25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBtX3JlcXVpcmVkVHlw
ZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0
YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVsc2UKQEAgLTUyLDE4ICs1Mywy
MSBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorUHV0QnlJ
ZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0Owog
ICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1f
cmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1
dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlv
blNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAg
ICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYgKzc1LDcgQEAgUHV0QnlJZFZh
cmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVy
ZSA9IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25T
ZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3JlcXVpcmVk
VHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NSw2ICs5
MCw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgcmVzdWx0
Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9m
ZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0
YXR1cyk7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwxMiBAQCBib29sIFB1dEJ5SWRW
YXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVy
Lm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXF1aXJlZFR5
cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFjZToKKyAgICBjYXNlIFJlcGxh
Y2U6IHsKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBSZXBs
YWNlOiB7CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKQEAg
LTE1OCw2ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25z
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
KyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6
OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAg
ICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAg
ICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZz
ZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCksCisgICAgICAgICAgICAiPiIp
OwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAgICAg
ICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBpbkNvbnRleHQob2xk
U3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAgICAgICBwb2ludGVyRHVtcElu
Q29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAotICAgICAgICAgICAgaW5D
b250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgp
LCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwg
Il0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5cGUoKSwgIj4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAx
ODk3NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1YmxpYzoKICAgICBQdXRCeUlk
VmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5SWRWYXJpYW50JiBvcGVy
YXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFu
dCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9m
ZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
b2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBz
ZXR0ZXIoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2ICs5OSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9CiAKKyAgICBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3JlcXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdyaXRlc1N0cnVjdHVyZXMoKSBj
b25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OwogICAgIGJvb2wgbWFr
ZXNDYWxscygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgU3RydWN0
dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2Nv
bmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODk3NTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNyArMzM2LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0Zp
cmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBh
bnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBp
bmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWlu
Z1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1
cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcu
aXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAv
LyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOwor
ICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQs
IGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZl
CisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNl
LCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAv
LyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVu
IGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRp
b24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBv
ZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0
aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNC
ZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRo
ZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJl
dHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMg
dG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0
aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRo
YXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQg
ZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRo
ZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3
YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0
aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBp
bnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODk3NTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE2LDkgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0
IGZpbHRlcihUIG5vZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25S
ZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRU
eXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0
ZXIoZm9yTm9kZShub2RlKSwgc2V0KTsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5v
ZGUpLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpAQCAtMTM5LDcgKzEzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRl
ckJ5VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7Cisg
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVy
ZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVz
KTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRl
ZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVl
JiwgRnJvemVuVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5NzUx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5p
c0Nsb2JiZXJlZCgpCisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAg
ICAgICAgICAgICAmJiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2
YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBz
dGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVl
Lm1fc3RydWN0dXJlLnNldCgpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmll
ck51bWJlcigpXSk7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFw
aC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBH
ZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9z
dHJ1Y3R1cmUuc2V0KCksIHVpZCk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2lu
ZyB0byBiZSAtIGlzIGl0IFRPUCwgYSBjb25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAg
ICAvLyBzb21ldGhpbmcgbW9yZSBzdWJ0bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyB0aGluZyB3b24ndCBnaXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3Rv
dHlwZXMuIElmIGl0IGRpZCwgd2UnZAogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUg
d29yayB0byBkbyBoZXJlLgogICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG5vZGUsIHN0YXR1c1tpXS5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFs
dWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3Rh
bnRSZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUg
dGhpc1Jlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSwgdWlkLCBzdGF0dXNbaV0ub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xv
YmJlclN0YXRlKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0
YXR1cy5udW1WYXJpYW50cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0g
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpID0gcmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpAQCAtMTg4MCw3ICsxODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRl
cmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1
cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIg
KzE4NzcsMjMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAvLyB0aGF0IGluY2x1ZGVzIHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNl
IHdlIGNvdWxkIG1ha2UgdGhlIHN0cnVjdHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmlj
aWVudC4gV2UgY3VycmVudGx5IGRvbid0LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1f
c3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1
cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05v
bmU7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAg
IGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyOgorICAgICAgICAgICAg
YWRtaXR0ZWRUeXBlcyA9IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtp
bmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZh
bHVlLCBzZXQpOworICAgICAgICAKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVk
VHlwZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4
NCwyOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRh
dGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwg
ZGF0YS5vZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgp
OworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2RhdGEuaWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9m
IHRoaXMgdGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBr
bm93aW5nIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFi
bHkgbm90IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXph
dGlvbiAodXN1YWxseQorICAgICAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5
YmUgYnkgQ1NFIGZvciBleGFtcGxlKSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3Ry
dWN0dXJlCisgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBD
dXJyZW50bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkK
KyAgICAgICAgLy8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBw
cm92ZS4KKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1
ZUZvclByb3BlcnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwg
ZGF0YS5vZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAg
IC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUg
dXAgd2l0aCBpcyBiZXR0ZXIuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5n
OworICAgICAgICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEtPmluZmVycmVkVHlw
ZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRl
cih0eXBlRnJvbVBhcnNpbmcpOworCisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJl
IGRvZXMgbm90IGV4aXN0IGFueSB2YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdz
IHByb2JhYmx5CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5
IGludmFsaWRhdGVkLgorICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAg
bV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFs
dWU7CisgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTIxMjAsNiArMjEzNiw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1
dCB0aGlzIG5vZGUgaXMgRlRMLW9ubHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFu
dHModHJ1ZSk7CiAgICAgICAgIAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmll
ck51bWJlcl07CisKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFj
dFZhbHVlIHJlc3VsdDsKQEAgLTIxMjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAh
PSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQu
bWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
c3dpdGNoIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVl
IHRoaXNSZXN1bHQ7CisgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgp
LmNvbnN0YW50KCksCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJl
clN0YXRlKCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5z
ZXQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5t
ZXRob2QoKS5jb25zdGFudCgpLAotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xv
YmJlclN0YXRlKCkpOwotICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisg
ICAgICAgICAgICBjYXNlIEdldEJ5T2ZmZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1
ZUZvclByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIGdldENhc2Uu
bWV0aG9kKCkub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFz
ZVNldCkgPT0gQ29udHJhZGljdGlvbikKQEAgLTIxNjMsNiArMjE5Miw4IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1
bHRpbmdWYWx1ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07CkBAIC0yMTcwLDYgKzIyMDEsMTEgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFz
ZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2lu
YWxWYWx1ZTsKKyAgICAgICAgICAgIHRoaXNWYWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5y
ZXF1aXJlZFR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzdmFs
dWUpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5v
bmx5U3RydWN0dXJlKCkgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAg
ICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0yMTg1LDYgKzIyMjEsOSBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG9ic2VydmVUcmFuc2l0
aW9ucyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRp
Y3Rpb24pCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBm
b3Iobm9kZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEh
b3JpZ2luYWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2
NCwxMyArMjMwMywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUu
aXNDbG9iYmVyZWQoKSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUo
KSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0
KCksCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0
KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRy
YW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBAQCB2b2lkIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFi
c3RyYWN0U3RhdGVUeXBlPgogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0gICAgaWYg
KHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBpZiAodmFs
dWUuZmlsdGVyKG1fZ3JhcGgsIHNldCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlvbk9LKQog
ICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxz
ZSk7CiAgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw2ICsxMTcsNTYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBo
JiBncmFwaAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVl
OjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCit7CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVh
bik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAg
ICAgIHNldFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVj
Qnl0ZWNvZGVOdW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OlN0cmluZzoKKyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsK
KyAgICAgICAgbWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6Cisg
ICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3Ao
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBncmFwaCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7Cisg
ICAgaWYgKGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcygpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JS
ZXByZXNlbnRhdGlvbihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9k
ZSogbm9kZSkKIHsKICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkg
ewpAQCAtMTg5LDggKzIzOSwyMiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlW
YWx1ZShHCiAgICAgcmV0dXJuIG9sZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0
IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYg
b3RoZXIpCitib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAgIEFic3Ry
YWN0VmFsdWUgdHlwZVZhbHVlOworICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVycmVkVHlw
ZSk7CisKKyAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAgbWVyZ2Vk
VmFsdWUubWVyZ2UodHlwZVZhbHVlKTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9PSB0eXBl
VmFsdWU7Cit9CisKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAg
IEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUg
YWRtaXR0ZWRUeXBlcykKK3sKKyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwp
KTsKKyAgICAKICAgICBpZiAoaXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9L
OwogICAgIApAQCAtMTk4LDcgKzI2Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKEcKICAgICAvLyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEg
c3BlY2lmaWMgdmFsdWUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwOTY2MwogICAgIAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmVzKCk7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVy
ZXMoKSB8IGFkbWl0dGVkVHlwZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9k
ZXNGcm9tU3RydWN0dXJlcygpOwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAg
CkBAIC0zMTUsNiArMzc5LDEzIEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKGMKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBB
YnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsK
KyAgICBmaWx0ZXJWYWx1ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBmaWx0
ZXIoZmlsdGVyVmFsdWUpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlU
eXBlKCkKIHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYg
dGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5NzUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNs
dWRlICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4
dC5oIgpAQCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAg
IG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9
Ci0gICAgCisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYpOworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJl
c2VudGF0aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxw
dHIpOwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwog
ICAgIApAQCAtMjgwLDE3ICsyODQsMjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsK
ICAgICAgICAgcmV0dXJuICEobV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisKKyAgICBi
b29sIGlzVHlwZShHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0
OworCisgICAgLy8gRmlsdGVycyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBz
ZXQuIElmIHRoZSBhZG1pdHRlZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAg
ICAvLyBpbXBsaWNpdGx5IGZpbHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVj
dHVyZSBzZXQsIHdoaWNoIGFyZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwu
IEhlbmNlLCBhZnRlciB0aGlzIGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFu
eSBub24tY2VsbCBtZW1iZXJzLiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBl
cyB0byBwcmVzZXJ2ZSBzb21lIG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBm
b3IgYWRtaXR0ZWRUeXBlcyB0byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBG
aWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1
bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJl
c3VsdCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
QnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQg
ZmlsdGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAg
RmlsdHJhdGlvblJlc3VsdCBjaGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmKTsKICAgICAKICAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIAor
CiAgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAg
aWYgKGlzSGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYs
OSArMjA2LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3Qg
Q2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVj
a3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0
IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZz
ZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUq
IHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVU
eXBlID0gR2V0QnlPZmZzZXQpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0
ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBO
b2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5
T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9k
ZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJl
IHNldC4gRG9lcyBub3QKICAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlv
biwgYnV0IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJh
ZGljdGlvbi4KQEAgLTIzMDQsNyArMjMwMyw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5v
ZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxNSwx
MyArMjMxNiwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
YWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJO
dW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVy
cmVkVHlwZTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9w
SW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwog
CiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeU9mZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRU
eXBlLAorICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzIsNiArMjMzNiw3IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5v
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7
CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAgIE5vZGUq
IHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlT
dG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ2LDcgKzI0NTEsOCBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFu
dCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAgICAgICAgcmV0
dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVt
YmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zm
c2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIs
IG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9CiAgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhp
cyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTUyLDEzICsyNTU4LDEzIEBAIE5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsK
ICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0g
YmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKICAgICAgICAgLy8gVHJ5
IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90
IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYgdGhlIGJhc2Un
cyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRm
Z1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90
eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAg
Ly8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBh
bGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjIzLDkgKzI2MjksMTYgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQorCisg
ICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CisgICAgICAgIGlm
IChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKQorICAgICAgICAgICAgICAgIGluZmVycmVk
VHlwZS5tZXJnZShtX2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlk
KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRU
eXBlOjpUb3A7CiAgICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBs
b2FkT3ApOwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2MzYsNyArMjY0
OSw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxF
QVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAK
ICAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRp
Zmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVy
biBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZh
cmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuaW5mZXJyZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxODk3NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1
ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTQ0OCw2ICs0NDksNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVl
VmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOwogCiAgICAgICAgICAgICAg
ICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIg
dGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAgICAgICAgICAg
IGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3Rh
bnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgpAQCAtNDYzLDcgKzQ2NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1w
bGUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm51bVZhcmlhbnRzKCkpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+IDEgJiYgIWlz
RlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQpAQCAtNjY2LDYgKzY2OCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAogICAgICAg
ICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xk
U3RydWN0dXJlKCkpOworICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQzKCku
bm9kZSgpLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rlc2lyZWRJ
bmZlcnJlZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbmZlcnJl
ZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3RhdGlvbiBm
b3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0byBoYXZl
IGEgbGl2ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVjdCBoYXMg
dGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZEluZmVycmVk
VHlwZSB7CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAgIDogbV9v
YmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZlcnJlZFR5
cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYg
ZXhwZWN0ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZXhwZWN0
ZWQoZXhwZWN0ZWQpCisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIp
CisgICAgICAgICwgbV9leHBlY3RlZChUb3ApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVjdCAmJiBtX2V4cGVjdGVkOyB9
CisKKyAgICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9leHBlY3RlZDsgfQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVjdGVkKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAg
bV9vYmplY3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2JqZWN0CisgICAgICAgICAgICAm
JiBtX2V4cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVj
dCAmJiBtX2V4cGVjdGVkID09IFRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBlKj46Omhh
c2gobV9vYmplY3QpICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKworICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwgY29udGV4
dCksICIgZm9yICIsIFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQo
b3V0LCBjb250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKiBtX29i
amVjdDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKK307CisKK3N0
cnVjdCBEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwgY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZH
OjpEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRG
Rzo6RGVzaXJlZEluZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZEluZmVycmVkVHlw
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NiArNjUsMTEgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOgogICAg
IH0KIH0KIAordm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQor
eworICAgIGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwog
RGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRj
aHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5OCwxMSBAQCB2
b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9hZGFwdGl2ZVN0
cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRz
OjphZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQoreworICAgIG1faW5m
ZXJyZWRUeXBlcy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5k
ZmdTaG91bGRXYXRjaCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9p
bnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9j
aywgY29tbW9uRGF0YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNv
ZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3Rp
bGxWYWxpZCgpIGNvbnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2lu
dHM6OmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxp
ZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAg
ICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYWRhcHRpdmVT
dHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVj
dHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRUeXBlcy5hcmVT
dGlsbFZhbGlkKCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApAQCAtMTI3LDYg
KzEzOSw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFAKICAgICBv
dXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFs
dWVzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAi
LCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmlu
dCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2
ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZl
cnJlZCB0eXBlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4dCksICJcbiIp
OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4OTc1
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4u
aCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZEluZmVy
cmVkVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCkBAIC05
MSw2ICs5MiwxOCBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvCiAg
ICAgfQogfTsKIAorc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9uRGF0YSYp
OworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsK
KyAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0KQorICAg
IHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKKyAgICB9Cit9
OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRv
ciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1OSw2ICsxNzIs
MTAgQEAgcHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2Fs
bCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMK
ICAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2tr
ZWVwaW5nLgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
Jik7CisKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBk
aXJlY3RseS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9lcworICAgIC8v
IHRoZSByZXF1aXJlZCBHQyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAg
ICAKQEAgLTE4Niw2ICsyMDMsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KKyAgICBib29sIGlz
V2F0Y2hlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KIAogICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3LDcgQEAgcHJpdmF0ZToK
ICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZh
bHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9p
bnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+
IG1fYnVmZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFw
dGl2ZVN0cnVjdHVyZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxEZXNpcmVk
SW5mZXJyZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlwZXM7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTIs
NiArMTA5Miw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5o
YXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldCwgbV9pbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwg
bm9kZS0+Y2hpbGQzKCkubm9kZSgpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0b3JhZ2VBY2Nl
c3NEYXRhKCkuaW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIo
bm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODk3NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODg3LDYgKzg4Nyw1MCBAQCBib29sIEdyYXBoOjppc1NhZmVUb0xvYWQoSlNPYmplY3QqIGJhc2Us
CiAgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihiYXNlLCBv
ZmZzZXQpKTsKIH0KIAorSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEdyYXBoOjppbmZlcnJlZFR5
cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCit7CisgICAgYXNzZXJ0SXNSZWdpc3Rl
cmVkKGtleS5zdHJ1Y3R1cmUoKSk7CisgICAgCisgICAgYXV0byBpdGVyID0gbV9pbmZlcnJlZFR5
cGVzLmdldChrZXkpOworICAgIGlmIChpdGVyICE9IG1faW5mZXJyZWRUeXBlcy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworCisgICAgSW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0
ID0ga2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3Ioa2V5LnVpZCgpKTsKKyAgICBpZiAo
IXR5cGVPYmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVk
VHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKwor
ICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVzY3JpcHRvciA9IHR5cGVPYmplY3Qt
PmRlc2NyaXB0b3IoKTsKKyAgICBpZiAoIXR5cGVEZXNjcmlwdG9yLmlzU3RpbGxWYWxpZCgpKSB7
CisgICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7Cisg
ICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZl
cnJlZFR5cGVzLmFkZChrZXksIHR5cGVEZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVm
ZXJlbmNlcy5hZGRMYXppbHkodHlwZU9iamVjdCk7CisgICAgaWYgKHR5cGVEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlRGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSk7CisKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcg
dGhpcyBkZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBt
YXkKKyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCisgICAg
bV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmpl
Y3QsIHR5cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Cit9CisK
K2Jvb2wgR3JhcGg6OndhdGNoRGVzaXJlZFR5cGUoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYg
a2V5KQoreworICAgIGlmICgha2V5LmlzU3RpbGxWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7
CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0ga2V5LmV4cGVjdGVkKCkuc3RydWN0dXJl
KCkpCisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgbV9wbGFuLndh
dGNocG9pbnRzLmFkZExhemlseShrZXkpOworfQorCiBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3Jh
cGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhhc2hNYXA8Q29k
ZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAtMTA2MSw3ICsx
MTA1LDcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKUwogSlNWYWx1
ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQo
KSkgeworICAgIGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBjb3VsZCBkbyBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0byBjb25zdGFudC1m
b2xkIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTIwLDM1IEBAIEpTVmFsdWUgR3JhcGg6
OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eShiYXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9CiAKK0Fic3Ry
YWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJT
dGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgYmFz
ZS5mb3JFYWNoKAorICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICAgICAgdmFsdWUuc2V0KCp0aGlzLCBp
bmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCkpOworICAgICAgICAgICAgcmVz
dWx0Lm1lcmdlKHZhbHVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
QWJzdHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0
IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKKyAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQorewor
ICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZz
ZXQpKSB7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0
KCp0aGlzLCAqZnJlZXplKHZhbHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAg
ICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0
KCksIHVpZCwgY2xvYmJlclN0YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFw
VG9wKCk7Cit9CisKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1Zh
bHVlIGJhc2UsIFNjb3BlT2Zmc2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vz
b21lIGNvbmN1cnJlbmN5IHN0b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5
dGVDb2RlUGFyc2VyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTg5NzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NzUsNiArNjc1LDIxIEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3Mg
aWYgaXQncyBrbm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBn
aXZlbiBvZmZzZXQgaXMgZmluZS4gVGhpcyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5n
IHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJv
b2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAv
LyBUZWxscyB1cyB3aGF0IGluZmVycmVkIHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHBy
b3BlcnR5IHRvIGhhdmUgbm93IGFuZCBpbiB0aGUgZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGluZmVycmVkVHlwZUZvcihQcm9wZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAg
ICB9CisKKyAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUpOworCisgICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBw
cm9wZXJ0eSBpbmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEg
Z29vZCBhYnN0cmFjdAorICAgIC8vIHZhbHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdp
dGggdGhlIGdpdmVuIGFic3RyYWN0IHZhbHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUpOwogICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2Rl
QmxvY2sqKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2Fs
bEZyYW1lKik7CkBAIC04NTYsNiArODcxLDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJs
b2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxp
dmVuZXNzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2Rl
S2lsbHM+PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3Qq
LCBQcm9wZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlw
ZUtleSwgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9t
aW5hdG9ycyBtX2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1i
ZXJpbmc7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0luZmVycmVkVHlwZUNoZWNrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2
b2lkIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9u
U2V0LCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiBiYXNlTm9k
ZSwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEZvcmNlT1NS
RXhpdCwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvb2xlYW46CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3Bl
Y05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoQm9vbGVhblVzZSwgYmFzZU5vZGUpKTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBF
ZGdlKE90aGVyVXNlLCBiYXNlTm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJ
bmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoSW50MzJVc2UsIGJhc2VOb2RlKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBv
cmlnaW4sIEVkZ2UoTnVtYmVyVXNlLCBiYXNlTm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKFN0cmluZ1VzZSwg
YmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9i
amVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAg
ICAgICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlw
ZS5zdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShDZWxsVXNlLCBiYXNlTm9kZSkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZToKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAgICAgICAgT3BJ
bmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgp
KSksCisgICAgICAgICAgICBFZGdlKENlbGxPck90aGVyVXNlLCBiYXNlTm9kZSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBF
ZGdlKE9iamVjdFVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoT2JqZWN0T3JPdGhl
clVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZHR5
cGU6OlRvcDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERGR19DUkFTSChpbnNlcnRp
b25TZXQuZ3JhcGgoKSwgYmFzZU5vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2su
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRU
eXBlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkdJbmZlcnJlZFR5cGVD
aGVja19oCisjZGVmaW5lIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiSW5mZXJyZWRU
eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gSW5zZXJ0cyBh
IHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5vZGUgaGFzIHRoZSBnaXZlbiBpbmZl
cnJlZCB0eXBlLgordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRpb25T
ZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIE5vZGUqIGJhc2VOb2RlLCBjb25z
dCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbmZlcnJlZFR5
cGVDaGVja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxODk3NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2s7CiBzdHJ1Y3QgU3Rv
cmFnZUFjY2Vzc0RhdGEgewogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBrbm93IHRoZSBpbmZl
cnJlZCB0eXBlLiBGb3IgcHV0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVkIHRv
IHJlbWVtYmVyCisgICAgLy8gd2hhdCBjaGVjayBpcyBuZWVkZWQuIEZvciBnZXRzLCB0aGlzIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSBBSSBtaWdodCBmb3JnZXQgd2hhdCB0eXBlIGlz
CisgICAgLy8gZ3VhcmFudGVlZC4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJy
ZWRUeXBlOwogfTsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wZXJ0eVR5cGVLZXlfaAorI2RlZmlu
ZSBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8v
IFRoaXMgb2JqZWN0IGlzIGEga2V5IGZvciBmaW5kaW5nIGEgcHJvcGVydHkncyB0eXBlLiBJdCdz
IGEgdHVwbGUgb2YgU3RydWN0dXJlKiBhbmQgVW5pcXVlZFN0cmluZ0ltcGwqLgorCitjbGFzcyBQ
cm9wZXJ0eVR5cGVLZXkgeworcHVibGljOgorICAgIFByb3BlcnR5VHlwZUtleSgpCisgICAgICAg
IDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChudWxscHRyKQorICAgIHsK
KyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAg
ICAgICAsIG1fdWlkKHVpZCkKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRy
KQorICAgICAgICAsIG1fdWlkKGRlbGV0ZWRVSUQoKSkKKyAgICB7CisgICAgfQorCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlICYmIG1fdWlk
OyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJl
CisgICAgICAgICAgICAmJiBtX3VpZCA9PSBvdGhlci5tX3VpZDsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJl
Kj46Omhhc2gobV9zdHJ1Y3R1cmUpICsgV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46
Omhhc2gobV91aWQpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX29iamVjdCAmJiBtX3VpZCA9PSBkZWxl
dGVkVUlEKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50
KHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSwgIisiLCBtX3VpZCk7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgY29udGV4dCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHN0YXRpYyBVbmlxdWVkU3RyaW5nSW1wbCogZGVsZXRlZFVJRCgpCisgICAgeworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlUeXBlS2V5
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvcGVydHlUeXBlS2V5JiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQ
cm9wZXJ0eVR5cGVLZXkmIGEsIGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxh
dGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAg
IHR5cGVkZWYgSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleUhhc2ggSGFzaDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb3BlcnR5VHlwZUtleV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAxODk3NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAgICBj
YXNlIENlbGxVc2U6CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2Ug
T2JqZWN0VXNlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICBjYXNlIEZpbmFs
T2JqZWN0VXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMyLDYgKzUy
MzIsODAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZihOb2RlKgogICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUsIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVt
cEdQUikKK3sKKyAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKKyAgICAK
KyAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1
cmUoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksCisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BSVGVtcG9yYXJ5PiBzdHJ1Y3R1cmU7
CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFI7CisgICAgICAgIAorICAgICAgICBpZiAodGVt
cEdQUiA9PSBJbnZhbGlkR1BSKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEdQUlRlbXBvcmFyeT4odGhpcyk7CisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBz
dHJ1Y3R1cmUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQ
UiA9IHRlbXBHUFI7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJl
R1BSKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQo
KS5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKAorICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVj
dHVyZUdQUiwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5j
aFdlYWtTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBz
dHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAKKyAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgY29t
cGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIGNlbGwuZ3ByKCksIEludmFsaWRHUFJSZWcpOworICAg
ICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2Ug
Q2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVl
LmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjZWxsID0gbV9qaXQuYnJhbmNoSWZDZWxsKHZhbHVl
UmVncyk7CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgdmFsdWVSZWdzLCBu
b2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2hJZk5vdE90aGVyKHZhbHVlUmVncywgdGVtcEdQUikpOworICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBjZWxsLmxpbmsoJm1faml0KTsK
KyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIHRlbXBHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgbm9SZXN1
bHQodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+dHJhbnNpdGlv
bigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewpAQCAtNTYzNiw2ICs1
NzEwLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRnZSAKICAgICAo
U3BlY3VsYXRlQ2VsbE9wZXJhbmQodGhpcywgZWRnZSkpLmdwcigpOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFu
ZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sg
PSBtX2ppdC5icmFuY2hJZkNlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygpKTsKKyAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCBTcGVjQ2VsbCB8
IFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihvcGVyYW5kLmpzVmFs
dWVSZWdzKCksIHRlbXBHUFIpKTsKKyAgICBvay5saW5rKCZtX2ppdCk7Cit9CisKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVk
c1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKQEAgLTU5MTYsNiArNjAwNiw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIENlbGxVc2U6CiAg
ICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2Vs
bE9yT3RoZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVk
Z2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxNSw2
ICsyMjE1LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVU
eXBlT2YoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqLCBHUFJS
ZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0
dXJlKE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsKICAgICB2b2lk
IG1vdmVGYWxzZVRvKEdQUlJlZyk7CkBAIC0yMzc0LDYgKzIzNzYsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlQm9v
bGVhbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVj
dWxhdGVDZWxsT3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdlKTsK
ICAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlRmlu
YWxPYmplY3QoRWRnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5NzUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIFN0
cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLSAg
ICAKKwogICAgIC8vIEluIG1vc3QgY2FzZXMsIHdoYXQgeW91IHJlYWxseSB3YW50IHRvIGRvIGlz
IHZlcmlmeSB3aGV0aGVyIHRoZSBzZXQgaXMgdG9wIG9yIGNsb2JiZXJlZCwgYW5kCiAgICAgLy8g
aWYgbm90LCBlbnVtZXJhdGUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzLiBVc2UgdGhpcyBvbmx5IGlu
IGNhc2VzIHdoZXJlIHRoZSBzaW5nbGV0b24gY2FzZSBpcwogICAgIC8vIG1lYW5pbmdmdWxseSBz
cGVjaWFsLCBsaWtlIGZvciB0cmFuc2l0aW9ucy4KQEAgLTIwMiw2ICsyMDIsMTMgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBtX3NldC5vbmx5
U3RydWN0dXJlKCk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIG1fc2V0LmZvckVhY2goZnVuY3Rvcik7Cisg
ICAgfQogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJldmlzaW9uIDE4OTc1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5LDYgKzc5LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFVzZQogICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICBvdXQucHJpbnQoIktub3duQ2Vs
bCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAg
b3V0LnByaW50KCJDZWxsT3JPdGhlciIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBPYmpl
Y3RVc2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAxODk3NTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtub3duQm9vbGVhblVzZSwK
ICAgICBDZWxsVXNlLAogICAgIEtub3duQ2VsbFVzZSwKKyAgICBDZWxsT3JPdGhlclVzZSwKICAg
ICBPYmplY3RVc2UsCiAgICAgRnVuY3Rpb25Vc2UsCiAgICAgRmluYWxPYmplY3RVc2UsCkBAIC0x
MDgsNiArMTA5LDggQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwog
ICAgIGNhc2UgQ2VsbFVzZToKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgcmV0dXJu
IFNwZWNDZWxsOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVj
Q2VsbCB8IFNwZWNPdGhlcjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgcmV0dXJuIFNw
ZWNPYmplY3Q7CiAgICAgY2FzZSBGdW5jdGlvblVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDE4LDYgKzQxOCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBn
cmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKICAgICAgICAgICAg
ICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6Cisg
ICAgICAgICAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgICAgICAgICBjYXNl
IE9iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODk3NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAyNiwyMSArMjAyNiw1NiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29t
cGlsZUNoZWNrU3RydWN0dXJlKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCiAgICAgICAgIEV4aXRLaW5kIGV4aXRLaW5k
OwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdHJ1Y3R1
cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0g
ICAgICAgIAotICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAgICAgICAgIHN0cnVjdHVyZUlE
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAot
ICAgICAgICAgICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewotICAgICAgICAgICAg
ICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0pOwor
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBDZWxsVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0S2luZCwgbV9u
b2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNlbGwgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2VsbCBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2Vs
bENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUo
CisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBt
X25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChz
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVy
KHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwo
KQpAQCAtNDAyMiw2ICs0MDU3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsg
MV0gOiBleGl0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07CisKKyAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBl
KG1fbm9kZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKQEAgLTU2NjksNiArNTcw
NiwxMzQgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CiAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMp
OwogICAgIH0KKworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUg
dmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNh
dXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAgICAgICAv
LworICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8vCisgICAg
ICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgc3dp
dGNoIChvYmplY3QtPnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoKKyAgICAg
ICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAgICAgLy8g
ICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgIGNh
c2UgNDM6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7
CisgICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAg
ICAgIC8vICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBl
MiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVk
Z2Ugd291bGQgYmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVh
ZCBvZiB0eXBlMSB8IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQo
KSkgeworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5i
b29sZWFuVHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPdGhlcjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RD
ZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVl
KGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YodHlwZS5zdHJ1Y3R1cmUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5u
b3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0
cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXIgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2Fz
ZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAg
ICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHR5cGUu
c3RydWN0dXJlKCkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUgJiB+
U3BlY0NlbGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3Q6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLCBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJ
bmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0lu
ZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxs
Q2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2Us
IGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAg
ICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAg
ICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisK
KyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb2FkUHJv
cGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKICAgICB7CkBAIC03NTA5LDYgKzc2NzQsOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhlZGdlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc1ODksNiArNzc1
NywyMiBAQCBwcml2YXRlOgogICAgICAgICBsb3dDZWxsKGVkZ2UpOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KworICAgICAgICBMQmFzaWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3Ro
ZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2Vs
bCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNO
b3RDZWxsLCBjb250aW51YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkp
OworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc3Bl
Y3VsYXRlTWFjaGluZUludChFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIW1faW50ZXJw
cmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCkBAIC04MTIyLDYgKzgzMDYsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24g
PT0gbV9vdXQuYm9vbGVhbkZhbHNlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIEFT
U0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmlu
YWxpemVyLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCkBAIC04MTMwLDkgKzgzMTcsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJn
dW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJP
ZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVu
ZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwotICAgICAgICAKKwogICAgICAgICBPU1JFeGl0
JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKIAorICAgICAgICBp
ZiAoZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuVHJ1ZSkgeworICAgICAgICAgICAgZW1p
dE9TUkV4aXRDYWxsKGV4aXQsIGxvd1ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAx
ODk3NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcwIEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ+JiBBc3NlbWIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0K
IAorQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90
VHlwZSgKKyAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEFzc2VtYmx5SGVscGVyczo6
SnVtcExpc3QgcmVzdWx0OworCisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEJvb2xlYW4ocmVncywgdGVtcEdQUikpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHJlc3VsdC5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5v
dE51bWJlcihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OlN0cmluZzoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUocmVncy5wYXlsb2FkR1BSKCks
IGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBv
ayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1
Y3R1cmUocmVncy5wYXlsb2FkR1BSKCksIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAg
ICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5
bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9i
amVjdE9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVt
cEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChyZWdzLnBheWxvYWRHUFIoKSkp
OworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cHVyaWZ5TmFOKEZQUlJlZyBm
cHIpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gYnJhbmNoRG91YmxlKERv
dWJsZUVxdWFsLCBmcHIsIGZwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTc1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxOSw2ICs3MTks
OCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5
cGUoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5j
aFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5NzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw4IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIHB0cmRpZmZf
dCBvZmZzZXRUb1BhdGNoZWRTdG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlw
ZSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6
OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKLSAgICAg
ICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
IHsKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVGb3Io
aWRlbnQuaW1wbCgpKSkgewogCiAgICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNz
KAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmZlcnJlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDI4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJl
ZFR5cGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSW5mZXJyZWRUeXBlKSB9OworCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZTo6Y3JlYXRl
KFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZSh2bSk7CisgICAg
cmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlw
ZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisgICAg
aW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsKK30KKworU3RydWN0
dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5m
ZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisK
KyAgICBpZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hZGRV
bmNvbmRpdGlvbmFsRmluYWxpemVyKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUuZ2V0KCkpOwor
fQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpm
b3JWYWx1ZShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAg
ICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAg
ICByZXR1cm4gSW50MzI7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVy
biBOdW1iZXI7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IoT2JqZWN0
V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgcmV0dXJuIE9i
amVjdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVG9wOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvcjo6bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCit7Cisg
ICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICBjYXNlIFN0cmluZzoKKyAgICAg
ICAgKnRoaXMgPSBUb3A7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE90aGVyOgorICAgICAg
ICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmU6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICBtX2tp
bmQgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICBjYXNlIEludDMyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE51bWJlcjsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBOdW1iZXI6CisgICAgICAg
IHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICp0aGlzID0g
T2JqZWN0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3Ry
dWN0dXJlKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3Ro
ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAg
ICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRo
aXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90
aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
KnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAg
ICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RPck90aGVyOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBU
b3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdE9yT3Ro
ZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
KyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgVG9wOgorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICp0aGlz
ID0gT2JqZWN0OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKKyAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICByZXR1cm47
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25z
dAoreworICAgIERlc2NyaXB0b3IgbWVyZ2VkID0gKnRoaXM7CisgICAgbWVyZ2VkLm1lcmdlKG90
aGVyKTsKKyAgICByZXR1cm4gKnRoaXMgPT0gbWVyZ2VkOworfQorCit2b2lkIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvcjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBpZiAobV9z
dHJ1Y3R1cmUpCisgICAgICAgIG91dC5wcmludCgiOiIsIGluQ29udGV4dCgqbV9zdHJ1Y3R1cmUs
IGNvbnRleHQpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRUeXBlKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0s
IHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fd2F0Y2hwb2ludFNldChD
bGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSgpCit7
Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBpZiAo
ZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0gZXhwZWN0ZWQ7Cit9CisKK2Jvb2wgSW5mZXJy
ZWRUeXBlOjppc1N0aWxsVmFsaWQoY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gaXNTdGlsbFZh
bGlkKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hw
b2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqIHdhdGNo
cG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKSAh
PSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0LmFkZCh3YXRjaHBvaW50KTsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sK
KyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGFkZFdhdGNocG9p
bnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwg
IjoiLCBkZXNjcmlwdG9yKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFs
dWVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIERlc2NyaXB0b3IgbXlUeXBlID0gZGVzY3JpcHRvcihsb2Nr
ZXIpOworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBlID0gRGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFs
dWUpOworCisgICAgbXlUeXBlLm1lcmdlKG90aGVyVHlwZSk7CisKKyAgICBBU1NFUlQoZGVzY3Jp
cHRvcihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRoZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlm
IHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsK
K30KKwordm9pZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSkKK3sKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHNldChsb2NrZXIsIHZtLCBUb3Ap
OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgVk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCit7CisgICAgLy8gV2Ug
d2lsbCB0cmlnZ2VyIHdyaXRlIGJhcnJpZXJzIHdoaWxlIGhvbGRpbmcgb3VyIGxvY2suIEN1cnJl
bnRseSwgd3JpdGUgYmFycmllcnMgZG9uJ3QgR0MsIGJ1dCB0aGF0CisgICAgLy8gY291bGQgY2hh
bmdlLiBJZiBpdCBkb2VzLCB3ZSBkb24ndCB3YW50IHRvIGRlYWRsb2NrLiBOb3RlIHRoYXQgd2Ug
Y291bGQgaGF2ZSB1c2VkCisgICAgLy8gR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBpbiB0aGUg
Y2FsbGVyLCBidXQgdGhlIGNhbGxlciBpcyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdv
dWxkbid0IGJlCisgICAgLy8gYSBnb29kIGlkZWEuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKHZtLmhlYXApOworICAgIAorICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJl
YWxseSBjaGFuZ2luZyB0aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5n
LgorICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gVGhlIG5ldyBkZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5lcmFs
IHRoYW4gdGhlIHByZXZpb3VzIG9uZS4KKyAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJzdW1l
cyhkZXNjcmlwdG9yKGxvY2tlcikpKTsKKworICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRvcnMg
aGF2ZSBkaWZmZXJlbnQgc3RydWN0dXJlcywgdGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNlIG9u
ZSBpcyBudWxsLgorICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0gbmV3
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tl
cikuc3RydWN0dXJlKCkgfHwgIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8g
V2UgYXJlIGNoYW5naW5nIHRoZSB0eXBlLCBzbyBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUgd2Fz
IHdhdGNoaW5nLCB0aGV5IGZpbmQgb3V0IGFib3V0IGl0IG5vdy4gSWYKKyAgICAvLyBhbnlvbmUg
aXMgd2F0Y2hpbmcsIHdlIG1ha2Ugc3VyZSB0byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24ndCBk
byB0aGlzIHNvcnQgb2YgdGhpbmcgYWdhaW4uCisgICAgaWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0
ZSgpICE9IENsZWFyV2F0Y2hwb2ludCkgeworICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVu
IGludmFsaWRhdGVkLCBzaW5jZSBpZiB3ZSB3ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBU
b3AuCisgICAgICAgIEFTU0VSVChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRh
dGVkKTsKKworICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdzIGJl
Y2F1c2Ugc29tZSBjb21waWxlciB0aHJlYWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5k
CisgICAgICAgIC8vIHRoZW4gdGhlIHR5cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9w
ZXJ0eSBpcyBjcmF6eSwgYW5kIGRvbid0IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgorICAg
ICAgICAvLyBpdC4KKyAgICAgICAgbmV3RGVzY3JpcHRvciA9IFRvcDsKKworICAgICAgICBtX3dh
dGNocG9pbnRTZXQuZmlyZUFsbCgiSW5mZXJyZWQgdHlwZSBjaGFuZ2VkIik7CisgICAgfQorCisg
ICAgLy8gUmVtb3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxv
bmdlciBuZWVkIGl0LgorICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSBudWxscHRyOworCisgICAgLy8gQWRkIGEgbmV3IEluZmVycmVkU3Ry
dWN0dXJlIG9iamVjdCBpZiB3ZSBuZWVkIG9uZSBub3cuCisgICAgaWYgKG5ld0Rlc2NyaXB0b3Iu
c3RydWN0dXJlKCkpIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgYWdyZWUgb24gdGhlIHN0cnVjdHVyZXMgaWYgd2UgZ2V0IGhlcmUuCisgICAg
ICAgICAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+
c3RydWN0dXJlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUg
PSBzdGQ6Om1ha2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih0aGlzLCBuZXdEZXNjcmlwdG9y
LnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCktPmFk
ZFRyYW5zaXRpb25XYXRjaHBvaW50KG1fc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRvciBraW5kLgorICAgIG1fa2lu
ZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAgLy8gQXNzZXJ0IHRoYXQgd2UgZGlkIHRo
aW5ncy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpOwor
fQorCit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBWTSYgdm0g
PSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fcGFyZW50LT5tX2xvY2spOworICAgIAorICAgIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRv
ciA9IGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVy
ZSgpOworICAgIAorICAgIHNldChsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVyZShJbmZl
cnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBtX3BhcmVudChw
YXJlbnQpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCit7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6ZmlyZUludGVybmFsKGNvbnN0
IEZpcmVEZXRhaWwmKQoreworICAgIG1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpCit7CisgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAobV9wYXJlbnQpLT52bSgpOworCisg
ICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKG1fcGFyZW50KSk7CisgICAgCisgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIG1fcGFyZW50LT5yZW1vdmVT
dHJ1Y3R1cmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgb3V0LnByaW50KCJCb3R0b20i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAg
ICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBvdXQucHJpbnQo
IkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVy
OgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
KyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgb3V0LnBy
aW50KCJPYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3RPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG91dC5wcmlu
dCgiVG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5mZGVmIEluZmVycmVkVHlwZV9oCisjZGVmaW5lIEluZmVycmVkVHlwZV9o
CisKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNlZCBmb3IgdGhlIGlu
ZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCisKK2NsYXNzIEluZmVy
cmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
ZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUoVk0mKTsKKworICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBCb3R0b20s
CisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIE90aGVyLAorICAgICAgICBJbnQzMiwKKyAgICAg
ICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmUs
CisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLAorICAgICAgICBPYmplY3QsCisg
ICAgICAgIE9iamVjdE9yT3RoZXIsCisgICAgICAgIFRvcAorICAgIH07CisKKyAgICBjbGFzcyBE
ZXNjcmlwdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlc2NyaXB0b3IoKQorICAgICAgICAg
ICAgOiBtX2tpbmQoQm90dG9tKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyKQorICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkK
KyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAg
ICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBCb3R0b20gJiYgIW1fc3RydWN0dXJlOworICAgICAgICB9CisK
KyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAg
ICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICAgICAgY2FzZSBC
b3R0b206CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBC
b29sZWFuOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKKyAgICAg
ICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCk7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGNhc2UgU3RyaW5n
OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpOworICAgICAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5p
c0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmU7Cisg
ICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCisgICAgICAgICAgICAgICAgICAg
IHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9z
dHJ1Y3R1cmUpOworICAgICAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgdmFsdWUu
aXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgVG9wOgorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERl
c2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09
IG90aGVyLm1fa2luZAorICAgICAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERl
c2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFz
aChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsKKyAgICAgICAg
fQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAgICAg
dm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvdGhlciBvbmUuCisgICAgICAg
IGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
S2luZCBtX2tpbmQ7CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgfTsKKwor
ICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9sb2NrOyB9CisK
KyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhyZWFkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+
c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICB9CisgICAgCisgICAgRGVzY3JpcHRvciBkZXNj
cmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7CisgICAgfQorICAgIERlc2NyaXB0b3IgZGVz
Y3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIH0KKyAg
ICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBjb25z
dCB7IHJldHVybiBkZXNjcmlwdG9yKCkua2luZCgpOyB9CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNj
cmlwdG9yKCkuc3RydWN0dXJlKCk7IH0KKworICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQgPT0gVG9wOyB9CisgICAgYm9vbCBpc1JlbGV2YW50KCkgY29uc3QgeyByZXR1cm4g
bV9raW5kICE9IFRvcDsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5
cGUgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdCByZWxldmFudCBp
ZiBpdCdzIFRvcC4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mIHZt
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRGVzY3JpcHRvciBjdXJyZW50RGVzY3Jp
cHRvciA9IGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7CisgICAgICAgIGlmIChjdXJyZW50RGVzY3Jp
cHRvci5pbmNsdWRlc1ZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGVz
Y3JpcHRvci5raW5kKCkgIT0gVG9wOworICAgICAgICByZXR1cm4gd2lsbFN0b3JlVmFsdWVTbG93
KHZtLCB2YWx1ZSk7CisgICAgfQorCisgICAgLy8gSW1tZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBl
IGlycmVsZXZhbnQuCisgICAgdm9pZCBtYWtlVG9wKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGlm
IChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYWtlVG9wU2xvdyh2bSk7
CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5z
ZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRo
YXQKKyAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgorICAgIGJv
b2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNj
cmlwdG9yJik7CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7CisgICAgCisg
ICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
V2F0Y2hwb2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJl
ZFR5cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAgICB2b2lkIHdpbGxTdG9yZVZh
bHVlU2xvdyhWTSYsIEpTVmFsdWUpOworICAgIHZvaWQgbWFrZVRvcFNsb3coVk0mKTsKKyAgICB2
b2lkIHNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9yKTsKKyAg
ICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9j
ayBtX2xvY2s7CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKKworICAgIGNsYXNz
IEluZmVycmVkU3RydWN0dXJlIDogcHVibGljIFdhdGNocG9pbnQsIHB1YmxpYyBVbmNvbmRpdGlv
bmFsRmluYWxpemVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlKElu
ZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3Zl
cnJpZGU7CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIEluZmVycmVkVHlwZSogbV9wYXJlbnQ7CisgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCisgICAgLy8gTk9U
RTogSWYgdGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2Ug
dGhhdCBpbXBsaWVzIHRoYXQgaXQgd291bGRuJ3QgYmUKKyAgICAvLyBwcm9maXRhYmxlIHRvIHdh
dGNoIGl0IGFnYWluLiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGlz
IG5ldmVyIGV4cG9zZWQgdG8gdGhlIERGRworICAgIC8vIHRocmVhZC4gVGhlIERGRyB3aWxsIHVz
ZSB0aGUgSW5mZXJyZWRUeXBlIGFzIHRoZSB0aGluZyB0aGF0IGl0IHdhdGNoZXMuCisgICAgSW5s
aW5lV2F0Y2hwb2ludFNldCBtX3dhdGNocG9pbnRTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6SW5mZXJyZWRUeXBlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVU
YWJsZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZVRhYmxlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5
cGVUYWJsZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlVGFibGUpIH07
CisKK0luZmVycmVkVHlwZVRhYmxlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKFZNJiB2bSkK
K3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SW5mZXJyZWRUeXBlVGFibGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGVUYWJsZSh2bSk7
CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAg
SW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0gc3RhdGljX2Nhc3Q8SW5mZXJy
ZWRUeXBlVGFibGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZS0+SW5mZXJyZWRUeXBl
VGFibGU6On5JbmZlcnJlZFR5cGVUYWJsZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRU
eXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0ganNDYXN0PEluZmVycmVkVHlwZVRhYmxlKj4o
Y2VsbCk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAor
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3RhYmxlKSB7CisgICAgICAgIGlmIChlbnRyeS52YWx1
ZS0+aXNSZWxldmFudCgpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJ5LnZhbHVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnkudmFsdWUuY2xlYXIoKTsKKyAgICB9
Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiBsb2NrZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgYXV0
byBpdGVyID0gbV90YWJsZS5maW5kKHVpZCk7CisgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQo
KSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gVGFr
ZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHBydW5lIGludmFsaWRhdGVkIHR5cGVzLgorICAgIGlmICgh
aXRlci0+dmFsdWUtPmlzUmVsZXZhbnQoKSkgeworICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlci0+dmFs
dWUuZ2V0KCk7Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgcmV0dXJuIGdldChsb2NrZXIsIHVpZCk7Cit9CisKK0luZmVycmVkVHlwZSog
SW5mZXJyZWRUeXBlVGFibGU6OmdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBnZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGVU
YWJsZTo6d2lsbFN0b3JlVmFsdWUoCisgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgLy8gVGhl
IGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVhZCBt
b2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0eSkg
eworICAgICAgICBUeXBlVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0
b3AuCisgICAgICAgIAorICAgICAgICBpZiAoaXRlci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZt
LCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGl0
ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBU
eXBlVGFibGU6OkFkZFJlc3VsdCByZXN1bHQ7CisgICAgeworICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9w
ZXJ0eU5hbWUsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOworICAgIH0KKyAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUg
PSBJbmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCBpbmZlcnJl
ZFR5cGUpOworICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+d2ls
bFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGht
IGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRo
ZSBoYXNoIG1hcC4KKyAgICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFR5cGVU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUpOworICAgICAg
ICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybjsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKworICAgICAgICBpdGVyLT52
YWx1ZS0+bWFrZVRvcCgpOworICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgVHlwZVRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVy
dHlOYW1lLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICBpZiAoIXJlc3VsdC5p
dGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5tYWtlVG9wKCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJy
ZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVz
IGZvciBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxp
ZmllcyB0aGUgU3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNp
ZXIgdG8gbWFuYWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhh
dCB0aGlzIHRoaW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5p
bmcuIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9w
ZXJ0aWVzCisvLyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9w
ZXJ0aWVzIGFyZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIK
Ky8vIGFzIGJlaW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMg
d2lsbCBoYXBwaWx5IGNvbmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KKy8vIGRp
ZmZlcmVudCBzdHJ1Y3R1cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pv
aW50IHNldHMgb2Ygb2JqZWN0cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAg
c3RhdGljIEluZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25z
dCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsK
KworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisg
ICAgLy8gR2V0IHRoZSBjdXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVsbHB0ciBmb3Ig
Ym90aCBUb3AgYW5kIEJvdHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCisgICAgLy8gb3du
aW5nIFN0cnVjdHVyZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5LgorICAgIEluZmVy
cmVkVHlwZSogZ2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1w
bCopOworICAgIEluZmVycmVkVHlwZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5m
ZXJyZWRUeXBlKiBnZXQoUHJvcGVydHlOYW1lKTsKKworICAgIGVudW0gU3RvcmVkUHJvcGVydHlB
Z2UgeworICAgICAgICBOZXdQcm9wZXJ0eSwKKyAgICAgICAgT2xkUHJvcGVydHkKKyAgICB9Owor
ICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHBy
b3BlcnR5IGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QKKyAgICAv
LyByZWxldmFudCBpZiBpdCdzIFRvcC4gTm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5h
bGx5IHBydW5lIFRvcCBlbnRyaWVzLgorICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworICAgIC8vIEludmFsaWRh
dGVzIHRoZSB0eXBlIGZvciB0aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9y
ZSBpbiBhIHJlZmxlY3RpdmUgY29udGV4dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0
eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGVU
YWJsZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGVUYWJsZSgpOworCisgICAgLy8gQm90dG9tOiBh
YnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8gVG9wOiBudWxsIHZhbHVlIGluIHRhYmxlLCAhdmFs
dWUtPmlzUmVsZXZhbnQoKSwgb3IgYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vCisgICAgLy8g
V2Uga25vdyBob3cgdG8gZGV0ZXJtaW5lIGlmIGFic2VuY2UgZnJvbSB0aGUgdGFibGUgaXMgYm90
dG9tIG9yIHRvcCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpcyBw
cmVzZW50IGluIHRoZSBvd25pbmcgc3RydWN0dXJlLiBIZW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBz
dHJ1Y3R1cmUsIGFic2VuY2UgbWF5IGhhdmUKKyAgICAvLyBkaWZmZXJlbnQgbWVhbmluZ3MuIFRo
ZSB3YXkgdGhhdCB0aGlzIGNsYXNzIGRldGVybWluZXMgaWYgdGhlIG93bmluZyBzdHJ1Y3R1cmUg
a25vd3Mgb2YgdGhlIHByb3BlcnR5CisgICAgLy8gaXMgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJl
dHdlZW4gYWN0aW9uczogcmVwbGFjZSBvciB0cmFuc2l0aW9uLiBJZiB3ZSdyZSBhZGRpbmcgYSBu
ZXcgcHJvcGVydHkKKyAgICAvLyAodHJhbnNpdGlvbiksIHRoZW4gYWJzZW5jZSBtZWFucyBib3R0
b20uIElmIHdlJ3JlIHN0b3JpbmcgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkgKHJlcGxhY2UsIHRo
ZW4KKyAgICAvLyBhYnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUg
dG8gd2F0Y2ggb3V0IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCisg
ICAgLy8gUzIsIHNoYXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9m
IHRoZW0gaW5pdGlhbGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5CisgICAgLy8gd2Fu
dCB0byBhZGQgUCB3aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0
aCBhIHR5cGUuIElmIFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAgIC8vIHRvIGluZGlj
YXRlIFRvcCwgdGhlbiBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFu
ZCB3b3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50cnkgaW4gdGhlIHRh
YmxlLiBUaGVuIFMxIHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1
c2UgUzIncyB0eXBlLiBDbGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2gg
Y29uZnVzaW9uIGJ5IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVu
dHJ5LiBIZW5jZSwKKyAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8g
cGxheSBmb3IgcHJvcGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdh
cworICAgIC8vIGNyZWF0ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3Ry
aW5nSW1wbD4sIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVwSGFzaCwg
SGFzaFRyYWl0czxVbmlxdWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7CisgICAgCisgICAgVGFi
bGVUeXBlIG1fdGFibGU7CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBsb2NrIHdoZW4gd2Un
cmUgZG9pbmcgbW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9yIHJlYWRzIG9uIHRo
ZSBjb21waWxlcgorICAgIC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVhZCBpcyBub3QgYWxs
b3dlZCB0byBkbyBtb2RpZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlVGFibGVf
aAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2
aXNpb24gMTg5NzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5lIGJvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlz
LT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Cisg
ICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAK
ICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRy
aWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBAIC0xMjI4
LDYgKzEyMzAsOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0
aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zm
c2V0KSkgeworICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7CisgICAg
ICAgIAogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNp
dHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMjQ0LDEyICsxMjQ4
LDE2IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgYm9vbCBoYXNJ
bmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiAgICAgaWYgKG9mZnNldCAh
PSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBj
dXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAg
IGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKQorICAgICAgICAgICAgc3RydWN0dXJlLT53
aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2Uodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29u
dGV4dCgpID09IFB1dEJ5SWQpOworCiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0
aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogCkBA
IC0xMjY5LDYgKzEyNzcsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJy
ZWRXYXRjaHBvaW50RmlyZTsKICAgICAKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBz
dHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZz
ZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAxODk3NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTEgKzM1MCwxNSBAQCB2b2lkIFN0cnVjdHVy
ZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlw
ZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6ZV90IGkg
PSBzdHJ1Y3R1cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVy
ZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJl
LT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBl
VGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQorICAgICAgICAg
ICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgp
LT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3RO
b3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTQ2NCw2ICs0NjgsNyBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRl
c0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
LnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJ
ZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29m
ZnNldDsKKyAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIAog
ICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KTsKIApAQCAtNDc5LDYgKzQ4NCwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKKyAgICAvLyBOT1RFOiBUaGVyZSBhcmUgc29t
ZSBnb29kIHJlYXNvbnMgd2h5IHRoaXMgZ29lcyBkaXJlY3RseSB0byB1bmNhY2hlYWJsZSBkaWN0
aW9uYXJ5IHJhdGhlciB0aGFuCisgICAgLy8gY2FjaGluZyB0aGUgcmVtb3ZhbC4gV2UgY2FuIGZp
eCBhbGwgb2YgdGhlc2UgdGhpbmdzLCBidXQgd2UgbXVzdCByZW1lbWJlciB0byBkbyBzbywgaWYg
d2UgZXZlciB0cnkKKyAgICAvLyB0byBvcHRpbWl6ZSB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAv
LyAtIENhY2hlZCB0cmFuc2l0aW9ucyB1c3VhbGx5IHN0ZWFsIHRoZSBwcm9wZXJ0eSB0YWJsZSwg
YW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGV5CisgICAgLy8gICBj
YW4ganVzdCByZWJ1aWxkIHRoZSB0YWJsZSBieSBsb29raW5nIGF0IHBhc3QgdHJhbnNpdGlvbnMu
IFRoYXQgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHRhYmxlIG9ubHkKKyAgICAvLyAgIGdyZXcgYW5k
IG5ldmVyIHNocmFuay4gVG8gc3VwcG9ydCByZW1vdmFscywgd2UnZCBoYXZlIHRvIGNoYW5nZSB0
aGUgcHJvcGVydHkgdGFibGUgbWF0ZXJpYWxpemF0aW9uCisgICAgLy8gICBjb2RlIHRvIGhhbmRs
ZSBkZWxldGlvbnMuIEFsc28sIHdlIGhhdmUgbG9naWMgdG8gZ2V0IHRoZSBsaXN0IG9mIHByb3Bl
cnRpZXMgb24gYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vICAgbGFja3MgYSBwcm9wZXJ0eSB0YWJs
ZSBieSBqdXN0IGxvb2tpbmcgYmFjayB0aHJvdWdoIHRoZSBzZXQgb2YgdHJhbnNpdGlvbnMgc2lu
Y2UgdGhlIGxhc3QKKyAgICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBpbm5lZCB0YWJsZS4g
VGhhdCBsb2dpYyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBoYW5kbGUgY2FjaGVk
CisgICAgLy8gICByZW1vdmFscy4KKyAgICAvLworICAgIC8vIC0gSW5mZXJyZWRUeXBlVGFibGUg
YXNzdW1lcyB0aGF0IHJlbW92YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlzIGlzIGltcG9ydGFu
dCBzaW5jZSBpZiB3ZSBjb3VsZAorICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVydHkgYW5kIHRoZW4g
cmUtYWRkIGl0IGxhdGVyLCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3AiIG9wdGltaXphdGlv
biB3b3VsZG4ndAorICAgIC8vICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVtb3ZhbCBhbHNvIGVp
dGhlciBwb2lzb25lZCB0eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRoaW5nIGVxdWl2YWxl
bnQgdG8KKyAgICAvLyAgIGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJvbmdseSBtYXJraW5n
IHRoZSBlbnRyeSBhcyBUb3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QgYWJzZW50LCBidXQK
KyAgICAvLyAgIGluc3RlYWQsIGhhcyBhIG51bGwgZW50cnkuCisgICAgCiAgICAgQVNTRVJUKCFz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUpOwpAQCAtODQxLDYgKzg2NCw0MyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0lu
dGVybmFsUHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7CiB9CiAK
K3ZvaWQgU3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplLAor
ICAgIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKKyAgICBBU1NFUlQoIWhhZEJlZW5EaWN0aW9uYXJ5KCkpOwor
CisgICAgLy8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0
aGluZyBlbHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQorICAg
IC8vIGdyYWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBJbmZlcnJl
ZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgIGlmICgh
dGFibGUpIHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlQmFycmllcigpOworICAgICAgICBtX2luZmVycmVkVHlw
ZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRoaXMgb25seSB3
b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBw
cm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwg
cHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBo
YXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2Fz
IHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJs
ZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisgICAgLy8gLi4uIGFuZCB0aGUg
cHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0g
cHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5
KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVk
VHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdl
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSwg
YWdlKTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOworICAgIH0KK30K
KwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0
cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0xMDU4LDYgKzExMTgsOCBAQCB2
b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIH0gZWxzZSBp
ZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0
LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAkocmV2aXNpb24gMTg5NzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkluZGV4
aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgpAQCAt
ODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1aW50OF90IGF0
dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRo
ZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5cGUgaW4gdGhlIGluZmVycmVk
IHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1
dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVudHJ5KCkKICAgICAgICAgOiBr
ZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBh
dHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAg
ICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAg
ICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0
cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMpOwogICAg
IH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQo
Vk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5
TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlw
ZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3
aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAgICAgLy8g
U3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhlIGxvY2sg
aXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ4MSw2ICs0ODYsNDEgQEAgcHVi
bGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0
aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlcygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVycmVkVHlwZVRhYmxlOworICAg
IH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9p
bmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS0+Z2V0KHVp
ZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBpbmZlcnJlZFR5
cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1dC0+ZGVzY3JpcHRvcigpOworICAg
ICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBpcyBzdGlsbCB2YWxpZC4KKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAgICAgICBWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
T3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAoIXNo
b3VsZE9wdGltaXplICYmICFtX2luZmVycmVkVHlwZVRhYmxlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
aG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6Ok5ld1Byb3BlcnR5KTsKKyAgICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAgICAg
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZE9wdGltaXplKQorICAgIHsKKyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdpbGxTbG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpPbGRQcm9w
ZXJ0eSk7CisgICAgfQorCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1
cmVTaGFwZShKU1ZhbHVlKTsKICAgICAKICAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc3Ry
dWN0dXJlcyBtYXRjaCBlbm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBhbGxv
Y2F0aW9ucwpAQCAtNjMyLDYgKzY3Miw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdGFy
dFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAgICB2b2lkIHdpbGxTdG9yZVZh
bHVlU2xvdygKKyAgICAgICAgVk0mLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOworCiAgICAg
c3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMg
Y29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwog
CkBAIC02NTUsNiArNjk4LDggQEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQg
dGhyb3VnaCBwcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5
IGFub3RoZXIgdGhyZWFkLgogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3Bl
cnR5VGFibGVVbnNhZmU7CiAKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFibGU+IG1f
aW5mZXJyZWRUeXBlVGFibGU7CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90
cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IDwgMjU2LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlz
aW9uIDE4OTc1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTkgKzc1LDE5IEBAIGlubGluZSBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRh
YmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlU
YWJsZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxpZE9m
ZnNldDsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0
KHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6
IGludmFsaWRPZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0lu
ZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IGhhc0luZmVycmVkVHlwZSk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJu
IGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworfQor
CitBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0lu
ZmVycmVkVHlwZSkKK3sKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCkBAIC0xMDEsNiAr
MTAxLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmli
dXRlczsKKyAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlOwogICAg
IHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261159</attachid>
            <date>2015-09-14 18:47:47 -0700</date>
            <delta_ts>2015-09-15 11:04:18 -0700</delta_ts>
            <desc>some more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>150591</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk3NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDUsNiArNzQ3LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE1LDYgKzE5
MjEsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3MSw2ICsyNTc5LDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY0Nyw4ICs0
NjU5LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00NjgyLDYgKzQ2OTQsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MzIsMTAgKzQ3
NDgsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDM5LDkgKzUwNTUs
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE5Myw2ICs1MjA5LDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzQwLDYgKzUzNTcsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTI4LDYgKzU5NDYsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDQxLDYg
KzYwNjAsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI1LDYgKzYzNDUsNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5MCw2ICs2
NTExLDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQzMiw2ICs3NDU0LDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4NDYsNiArNzg2OSw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAxODk3NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0IEBAIG5hbWVzcGFjZSBX
VEYgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0
cmluZ091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQ
dXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChjb21tYSwgIklzRGlyZWN0
Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7CiAKLSAgICBDU3RyaW5n
IHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJp
bnQoc3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6
a2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOworICAgIGlm
IChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMg
KzI2LDY3IEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5lIFB1dEJ5SWRGbGFnc19o
CiAKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGludHB0cl90IHsKICAgICBQ
dXRCeUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQorCisgICAgLy8gVGhpcyBm
bGFnIGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0LiBUaGF0IG1lYW5zIHRo
YXQgd2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBjaGVja2luZyBpZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEs
CisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJyZWQgdHlwZSBpbnZvbHZl
cyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFuZCB0aGVuCisgICAgLy8g
dXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRoZSBzZWNvbmRhcnkgbWFz
azoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBlTWFzaykgeworICAg
IC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAgIC8vICAgICBzd2l0Y2gg
KGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAgLy8gICAgIC4uLgorICAg
IC8vICAgICB9CisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlU
eXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIC8vICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1
cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKKyAgICAvLyAgICAgYnJlYWs7CisgICAg
Ly8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCisgICAgUHV0QnlJZFByaW1h
cnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRoZSBzZWNvbmRhcnkgdHlw
ZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3Ry
dWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorICAgIFB1
dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyID0gMHg0LCAvLyBTZWNv
bmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVN
YXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSA9IDB4MCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiA9IDB4MTgsCisg
ICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAorICAgIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCA9IDB4
MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKIH07CiAKK2lubGluZSBQdXRCeUlkRmxhZ3Mg
ZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJlSUQgaWQpCit7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMzsKKyNlbHNlCisg
ICAgUHV0QnlJZEZsYWdzIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKTsK
KyAgICBBU1NFUlQoIShyZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb2RlU3Ry
dWN0dXJlSUQoUHV0QnlJZEZsYWdzIGZsYWdzV29yZCkKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgPj4gMyk7CisjZWxzZQor
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RydWN0dXJlSUQ+KGZsYWdzICYgUHV0QnlJZFNlY29u
ZGFyeVR5cGVNYXNrKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNw
YWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgz
LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICBp
ZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRW
YXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlw
ZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwpAQCAt
MTAzLDcgKzEwMyw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20K
ICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIH0K
ICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBu
ZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIG9mZnNldCwgbmV3U3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9y
KHVpZCkpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTYyLDcgKzE2Myw3IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZv
LT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwog
ICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJ
ZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQs
IEluZmVycmVkVHlwZTo6VG9wKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0xOTMsNyArMTk0LDggQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNj
cmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIApAQCAtMjA2LDcgKzIwOCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5z
dHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1
dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3Ry
dWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1
cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5u
ZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTMyOSw4
ICszMzIsMTAgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93
IHBhdGguCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQp
KSkKKworICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9CisgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+
aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpA
QCAtMzU2LDEzICszNjEsMTYgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhl
cmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0
by4KLSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlk
LCAwLCBvZmZzZXQpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAg
ICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29u
Y3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5z
aXRpb24pCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJv
b2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwg
b2Zmc2V0KSk7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0LAor
ICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlk
KSkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg5NzY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlh
bnQ6Om9wZXJhdG9yCiAgICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsK
ICAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0
ID0gb3RoZXIubV9vZmZzZXQ7CisgICAgbV9yZXF1aXJlZFR5cGUgPSBvdGhlci5tX3JlcXVpcmVk
VHlwZTsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlu
a1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxM
aW5rU3RhdHVzKTsKICAgICBlbHNlCkBAIC01MiwxOCArNTMsMjEgQEAgUHV0QnlJZFZhcmlhbnQm
IFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJldHVybiAqdGhpczsKIH0KIAotUHV0QnlJ
ZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRU
eXBlKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0g
UmVwbGFjZTsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVp
cmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlk
VmFyaWFudDo6dHJhbnNpdGlvbigKICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVy
ZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlw
ZSkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRy
YW5zaXRpb247CkBAIC03MSw2ICs3NSw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW8KICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CiAg
ICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29m
ZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODUsNiArOTAsNyBAQCBQdXRCeUlkVmFyaWFu
dCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNv
bmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJlc3VsdC5t
X3JlcXVpcmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTEzNCw5ICsxNDAsMTIgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVy
Z2UoY29ucwogewogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVxdWlyZWRUeXBlICE9IG90aGVyLm1fcmVxdWly
ZWRUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoIChtX2tpbmQp
IHsKLSAgICBjYXNlIFJlcGxhY2U6CisgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgIHN3aXRj
aCAob3RoZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTogewogICAgICAgICAgICAg
QVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CkBAIC0xNTgsNiArMTY3LDcgQEAgYm9v
bCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKICAg
ICBjYXNlIFRyYW5zaXRpb246CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CkBAIC0y
MTAsMTQgKzIyMCwxNSBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50
CiAgICAgICAgIAogICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgb3V0LnByaW50KAotICAgICAg
ICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBv
ZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5D
b250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIs
ICIsIHJlcXVpcmVkVHlwZSgpLAorICAgICAgICAgICAgIj4iKTsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAg
ICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0
KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJl
KCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNl
dCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAg
IGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZz
ZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBTZXR0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDExICs1MywxMSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRW
YXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJl
cGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFu
c2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Im
KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmLApAQCAtOTksNiArOTksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9u
ZXdTdHJ1Y3R1cmU7CiAgICAgfQogCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHJlcXVp
cmVkVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFR5cGU7Cisg
ICAgfQorCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFs
bG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKQEAg
LTEzMCw2ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7
CiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJv
cGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fcmVx
dWlyZWRUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlu
a1N0YXR1czsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxODk3NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCiAjaW5jbHVkZSAiUGFyc2VyTW9kZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIK
ICNpbmNsdWRlICJSZWdFeHAuaCIKICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1
ZGUgIlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgiCkBAIC05OCwxMiArOTcsMTAgQEAgc3Ry
dWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUu
b3BlcmFuZCA9IDA7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkg
eyB1Lm9wY29kZSA9IG9wY29kZTsgfQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJh
bmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oUHV0
QnlJZEZsYWdzIGZsYWdzKSB7IHUucHV0QnlJZEZsYWdzID0gZmxhZ3M7IH0KICAgICB1bmlvbiB7
CiAgICAgICAgIE9wY29kZUlEIG9wY29kZTsKICAgICAgICAgaW50MzJfdCBvcGVyYW5kOwogICAg
ICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFnczsK
ICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0
Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9X
YXRjaHBvaW50LmgJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsMzkgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgdG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsK
ICAgICB9Ci0gICAgCisKKyAgICAvLyBOb3RlIHRoYXQgZm9yIGFueSB3YXRjaHBvaW50IHRoYXQg
aXMgdmlzaWJsZSBmcm9tIHRoZSBERkcsIGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byB3cml0ZSBj
b2RlIGxpa2U6CisgICAgLy8KKyAgICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8v
ICAgICB3LmZpcmVBbGwoKQorICAgIC8vCisgICAgLy8gQ29uY3VycmVudGx5IHRvIHRoaXMsIHRo
ZSBERkcgY291bGQgZG86CisgICAgLy8KKyAgICAvLyBpZiAody5pc1N0aWxsVmFsaWQoKSkKKyAg
ICAvLyAgICAgcGVyZm9ybSBvcHRpbWl6YXRpb25zOworICAgIC8vIGlmICghdy5pc1N0aWxsVmFs
aWQoKSkKKyAgICAvLyAgICAgcmV0cnkgY29tcGlsYXRpb247CisgICAgLy8KKyAgICAvLyBOb3Rl
IHRoYXQgdGhlIERGRyBhbGdvcml0aG0gaXMgd2lkZXNwcmVhZCwgYW5kIHNvdW5kLCBiZWNhdXNl
IGZpcmVBbGwoKSBhbmQgaW52YWxpZGF0ZSgpIHdpbGwgbGVhdmUKKyAgICAvLyB0aGUgd2F0Y2hw
b2ludCBpbiBhICFpc1N0aWxsVmFsaWQoKSBzdGF0ZS4gSGVuY2UsIGlmIGZpcmVBbGwoKSBvciBp
bnZhbGlkYXRlKCkgaW50ZXJsZWF2ZWQgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCBpc1N0aWxs
VmFsaWQoKSBjaGVjayBhbmQgdGhlIHNlY29uZCBvbmUsIHRoZW4gaXQgd291bGQgc2ltcGx5IGNh
dXNlIHRoZSBERkcgdG8gcmV0cnkKKyAgICAvLyBjb21waWxhdGlvbiBsYXRlci4KKyAgICAvLwor
ICAgIC8vIEJ1dCwgaWYgeW91IGNoYW5nZSBzb21lIHBpZWNlIG9mIHN0YXRlIHRoYXQgdGhlIERG
RyBtaWdodCBvcHRpbWl6ZSBmb3IsIGJ1dCBpbnZhbGlkYXRlIHRoZQorICAgIC8vIHdhdGNocG9p
bnQgYnkgZG9pbmc6CisgICAgLy8KKyAgICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAg
IC8vICAgICB3LmZpcmVBbGwoKQorICAgIC8vCisgICAgLy8gdGhlbiB0aGUgREZHIHdvdWxkIG5l
dmVyIGtub3cgdGhhdCB5b3UgaW52YWxpZGF0ZWQgc3RhdGUgYmV0d2VlbiB0aGUgdHdvIGNoZWNr
cy4KKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSB0d28gd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlz
OgorICAgIC8vCisgICAgLy8gLSBDYWxsIGZpcmVBbGwoKSB3aXRob3V0IGEgaXNCZWluZ1dhdGNo
ZWQoKSBjaGVjay4gVGhlbiwgdGhlIERGRyB3aWxsIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBo
YXMKKyAgICAvLyAgIGJlZW4gaW52YWxpZGF0ZWQgd2hlbiBpdCBkb2VzIGl0cyBzZWNvbmQgY2hl
Y2suCisgICAgLy8KKyAgICAvLyAtIERvIG5vdCBleHBvc2UgdGhlIHdhdGNocG9pbnQgc2V0IHRv
IHRoZSBERkcgZGlyZWN0bHksIGFuZCBoYXZlIHlvdXIgb3duIHdheSBvZiB2YWxpZGF0aW5nIHdo
ZXRoZXIKKyAgICAvLyAgIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoZSBERkcgdGhyZWFkIHVzZWQg
YXJlIHN0aWxsIHZhbGlkIHdoZW4gdGhlIERGRyBjb2RlIGlzIGluc3RhbGxlZC4KICAgICBib29s
IGlzQmVpbmdXYXRjaGVkKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0ZhdCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVyLmgJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOSArMTE2LDkgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2Rl
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9
IFNwZWNOb25lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBz
ZXQpOworICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCwgYWRtaXR0ZWRU
eXBlcyk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xMzksNyAr
MTM5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmlsdGVyQnlWYWx1ZShmb3JOb2RlKG5v
ZGUpLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFi
c3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0
IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5
cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
ckFycmF5TW9kZXMoQWJzdHJhY3RWYWx1ZSYsIEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25S
ZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJh
dGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFsdWUmLCBGcm96ZW5WYWx1ZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODk3NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MjksMTAgKzE4MjksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3Ry
dWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkKKyAgICAg
ICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkKICAgICAgICAgICAgICYmIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVj
Q2VsbCkpKSB7Ci0gICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCks
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKKyAgICAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpXTsKKyAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVz
ID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcih2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlk
KTsKICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAg
IC8vIEZpZ3VyZSBvdXQgd2hhdCB0aGUgcmVzdWx0IGlzIGdvaW5nIHRvIGJlIC0gaXMgaXQgVE9Q
LCBhIGNvbnN0YW50LCBvciBtYXliZQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3Jl
IHN1YnRsZT8KQEAgLTE4NDEsMjIgKzE4NDEsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0
IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3
ZSdkCiAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCiAg
ICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNv
bmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNl
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAg
ICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1
ZUZvclByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCB1aWQsIHN0
YXR1c1tpXS5vZmZzZXQoKSwgbV9ncmFwaC5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkg
PT0gMSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKLSAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkg
PSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xODgw
LDcgKzE4NzAsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFs
dWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFs
cmVhZHkgZW5zdXJlZCB0aGlzLgogCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+
c3RydWN0dXJlU2V0KCk7CiAgICAgICAgIApAQCAtMTg4OCwxMiArMTg3NywyMyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRoYXQgaW5jbHVk
ZXMgdGhlIHNldCB3ZSdyZSB0ZXN0aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUg
c3RydWN0dXJlIGNoZWNrCiAgICAgICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkg
ZG9uJ3QuCiAgICAgICAgIAotICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihzZXQpKSB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkp
CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworCisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAg
ICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ2VsbE9yT3RoZXI6CisgICAgICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3Bl
Y090aGVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAg
IAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCwgYWRtaXR0ZWRUeXBlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMDg0LDEzICsyMDg0LDI5IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9m
ZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25z
dGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBkYXRhLm9mZnNldCk7Ci0gICAg
ICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBo
LmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVt
YmVyXTsKKworICAgICAgICAvLyBGSVhNRTogVGhlIHBhcnQgb2YgdGhpcyB0aGF0IGhhbmRsZXMg
aW5mZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVsaWVzIG9uIEFJIGtub3dpbmcgdGhlIHN0cnVjdHVy
ZQorICAgICAgICAvLyByaWdodCBub3cuIFRoYXQncyBwcm9iYWJseSBub3Qgb3B0aW1hbC4gSW4g
c29tZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0gYW4gb3B0aW1pemF0aW9uICh1c3VhbGx5CisgICAg
ICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuIEFJLCBtYXliZSBieSBDU0UgZm9yIGV4YW1w
bGUpIHRoYXQgb2JzY3VyZXMgQUkncyB2aWV3IG9mIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8g
YXQgdGhlIHBvaW50IHdoZXJlIEdldEJ5T2Zmc2V0IHJ1bnMuIEN1cnJlbnRseSwgd2hlbiB0aGF0
IGhhcHBlbnMsIHdlJ2xsIGhhdmUgdG8gcmVseSBlbnRpcmVseQorICAgICAgICAvLyBvbiB0aGUg
dHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIHdhcyBhYmxlIHRvIHByb3ZlLgorICAgICAgICBBYnN0
cmFjdFZhbHVlIHZhbHVlID0gbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgdWlkLCBkYXRhLm9mZnNldCwgbV9zdGF0
ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisKKyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0
aGF0IHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIgY2FtZSB1cCB3aXRoIGlzIGJldHRlci4K
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlRnJvbVBhcnNpbmc7CisgICAgICAgIHR5cGVGcm9t
UGFyc2luZy5zZXQobV9ncmFwaCwgZGF0YS0+aW5mZXJyZWRUeXBlLCBtX3N0YXRlLnN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGcm9tUGFyc2luZyk7
CisKKyAgICAgICAgLy8gSWYgd2UgZGVjaWRlIHRoYXQgdGhlcmUgZG9lcyBub3QgZXhpc3QgYW55
IHZhbHVlIHRoYXQgdGhpcyBjYW4gcmV0dXJuLCB0aGVuIGl0J3MgcHJvYmFibHkKKyAgICAgICAg
Ly8gYmVjYXVzZSB0aGUgY29tcGlsYXRpb24gd2FzIGFscmVhZHkgaW52YWxpZGF0ZWQuCisgICAg
ICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQo
ZmFsc2UpOworCisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgaWYgKHZh
bHVlLm1fdmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEyMCw2ICsyMTM2LDggQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBiZWNh
dXNlIG9mIHRoZSBlZmZlY3Qgb24gY29tcGlsZSB0aW1lcywgYnV0IHRoaXMgbm9kZSBpcyBGVEwt
b25seS4KICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAg
CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyXTsKKwogICAgICAg
ICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
U3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwpAQCAt
MjEyOSwxOCArMjE0NywyOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9k
OjpDb25zdGFudCkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzd2l0Y2ggKGdldENhc2UubWV0
aG9kKCkua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25z
dGFudDogeworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKKyAgICAg
ICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwK
KyAgICAgICAgICAgICAgICAgICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVl
IHRoaXNSZXN1bHQ7Ci0gICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLAotICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCks
Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAg
ICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgIGNhc2UgR2V0
QnlPZmZldE1ldGhvZDo6TG9hZDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXQsIHVpZCwgZ2V0Q2FzZS5tZXRob2QoKS5vZmZzZXQoKSwg
bV9ncmFwaC5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0
aW9uKQpAQCAtMjE2Myw2ICsyMTkyLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAg
ICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdGluZ1ZhbHVlOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
QEAgLTIxNzAsNiArMjIwMSwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlm
ICh0aGlzU2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworICAgICAgICAg
ICAgdGhpc1ZhbHVlLmZpbHRlcihtX2dyYXBoLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAg
ICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXN2YWx1ZSk7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25z
LmFwcGVuZCgKQEAgLTIxODUsNiArMjIyMSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1pdCwg
dHJhbnNpdGlvbnMpOwogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdl
U3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgIGZvcihub2RlKG5vZGUtPmNoaWxk
MigpKSA9IHJlc3VsdGluZ1ZhbHVlOworICAgICAgICBpZiAoISFvcmlnaW5hbFZhbHVlICYmICFy
ZXN1bHRpbmdWYWx1ZSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMjY0LDEzICsyMzAzLDEzIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEJ5SWRG
bHVzaDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5tX3N0
cnVjdHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7Cisg
ICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICBQ
dXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwK
ICAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwKICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwKICAgICAg
ICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwotICAgICAgICAgICAgCisK
ICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFu
c2l0aW9uczsKQEAgLTI2MTUsOSArMjY1NCw5IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBG
aWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpm
aWx0ZXIoCi0gICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0
KQorICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3Bl
Y3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKIHsKLSAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3Jh
cGgsIHNldCkgPT0gRmlsdHJhdGlvbk9LKQorICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwg
c2V0LCBhZG1pdHRlZFR5cGVzKSA9PSBGaWx0cmF0aW9uT0spCiAgICAgICAgIHJldHVybiBGaWx0
cmF0aW9uT0s7CiAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICByZXR1cm4gQ29u
dHJhZGljdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw1
NiBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldFR5cGUoR3JhcGgmIGdyYXBoCiAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwogfQogCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBzd2l0
Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToK
KyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpCb29sZWFuOgorICAgICAgICBzZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjT3Ro
ZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAg
ICAgICBzZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBzZXRUeXBlKFNwZWNCeXRlY29kZU51bWJlcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBz
ZXQoZ3JhcGgsIGdyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICBtZXJnZShTcGVj
T3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoK
KyAgICAgICAgc2V0VHlwZShncmFwaCwgU3BlY09iamVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc2V0VHlwZShncmFw
aCwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBtYWtlSGVhcFRvcCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXQoCisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3Rh
dGUpCit7CisgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAoY2xvYmJlclN0YXRl
ID09IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7
Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBo
JiBncmFwaCwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2RlKQogewogICAgIGlm
IChyZXByZXNlbnRhdGlvbiA9PSBOb2RlUmVzdWx0RG91YmxlKSB7CkBAIC0xODksOCArMjM5LDIy
IEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKICAgICByZXR1cm4g
b2xkTWUgIT0gKnRoaXM7CiB9CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK2Jvb2wgQWJzdHJh
Y3RWYWx1ZTo6aXNUeXBlKEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiBpbmZlcnJlZFR5cGUpIGNvbnN0CiB7CisgICAgQWJzdHJhY3RWYWx1ZSB0eXBlVmFsdWU7
CisgICAgdHlwZVZhbHVlLnNldChncmFwaCwgaW5mZXJyZWRUeXBlKTsKKworICAgIEFic3RyYWN0
VmFsdWUgbWVyZ2VkVmFsdWUgPSAqdGhpczsKKyAgICBtZXJnZWRWYWx1ZS5tZXJnZSh0eXBlVmFs
dWUpOworCisgICAgcmV0dXJuIG1lcmdlZFZhbHVlID09IHR5cGVWYWx1ZTsKK30KKworRmlsdHJh
dGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoCisgICAgR3JhcGgmIGdyYXBoLCBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQorewor
ICAgIEFTU0VSVCghKGFkbWl0dGVkVHlwZXMgJiBTcGVjQ2VsbCkpOworICAgIAogICAgIGlmIChp
c0NsZWFyKCkpCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgCkBAIC0xOTgsNyAr
MjYyLDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIC8v
IGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCiAgICAg
Ci0gICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBt
X3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIHwgYWRtaXR0ZWRUeXBl
czsKICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7
CiAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKICAgICAKQEAgLTMxNSw2ICszNzksMTMg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoYwogICAgIHJldHVybiBD
b250cmFkaWN0aW9uOwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRl
cihHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKK3sKKyAgICBBYnN0cmFjdFZhbHVlIGZpbHRlclZhbHVlOworICAgIGZpbHRlclZhbHVlLnNl
dChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIGZpbHRlcihmaWx0ZXJWYWx1ZSk7Cit9
CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQogewogICAgIC8vIFdl
IGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUgY29udHJhdmVuZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJT
cGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBAIC0yMTQsNyArMjE1
LDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUo
KTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQg
c2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisgICAgdm9pZCBz
ZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUpOworCiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBO
b2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqID0gbnVsbHB0cik7CiAgICAgdm9pZCBmaXhU
eXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlKik7CiAgICAgCkBAIC0yODAsMTcgKzI4
NCwyNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gISht
X3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KKworICAgIGJvb2wgaXNUeXBlKEdyYXBoJiwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAgICAvLyBGaWx0ZXJz
IHRoZSB2YWx1ZSB1c2luZyB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gSWYgdGhlIGFkbWl0dGVk
VHlwZXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCwgdGhpcworICAgIC8vIGltcGxpY2l0bHkgZmls
dGVycyBieSB0aGUgdHlwZXMgaW1wbGllZCBieSB0aGUgc3RydWN0dXJlIHNldCwgd2hpY2ggYXJl
IHVzdWFsbHkgYSBzdWJzZXQgb2YKKyAgICAvLyBTcGVjQ2VsbC4gSGVuY2UsIGFmdGVyIHRoaXMg
Y2FsbCwgdGhlIHZhbHVlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW55IG5vbi1jZWxsIG1lbWJlcnMu
IEJ1dCwgeW91IGNhbgorICAgIC8vIHVzZSBhZG1pdHRlZFR5cGVzIHRvIHByZXNlcnZlIHNvbWUg
bm9uLWNlbGwgdHlwZXMuIE5vdGUgdGhhdCBpdCdzIHdyb25nIGZvciBhZG1pdHRlZFR5cGVzIHRv
IG92ZXJsYXAKKyAgICAvLyB3aXRoIFNwZWNDZWxsLgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRU
eXBlcyA9IFNwZWNOb25lKTsKICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFw
aCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJy
YXlNb2RlcyhBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihTcGVjdWxh
dGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKGNvbnN0IEZyb3pl
blZhbHVlJiB2YWx1ZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoY29uc3QgQWJzdHJh
Y3RWYWx1ZSYpOworCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBGaWx0cmF0aW9uUmVzdWx0IGNo
YW5nZVN0cnVjdHVyZShHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAogICAgIGJv
b2wgY29udGFpbnMoU3RydWN0dXJlKikgY29uc3Q7Ci0gICAgCisKICAgICBib29sIHZhbGlkYXRl
KEpTVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNIZWFwVG9wKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw5ICsyMDYsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5k
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9v
bCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVy
bmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKLSAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUq
IGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
Ci0gICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZz
ZXQpOworICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Im
LCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5
cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0
KTsKIAogICAgIC8vIENyZWF0ZSBhIHByZXNlbmNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJh
c2VkIG9uIHNvbWUga25vd24gb2Zmc2V0IGFuZCBzdHJ1Y3R1cmUgc2V0LiBEb2VzIG5vdAogICAg
IC8vIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uZGl0aW9uLCBidXQgaXQgbWF5IHJldHVy
biBhIG51bGwgb25lIGlmIGl0IGVuY291bnRlcnMgYSBjb250cmFkaWN0aW9uLgpAQCAtMjMwNCw3
ICsyMzAzLDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCitOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJy
ZWRUeXBlLCBOb2RlVHlwZSBvcCkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAg
aWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzE1LDEzICsyMzE2LDE2IEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0
YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5v
ZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJO
dW1iZXI7CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAg
IE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8o
cHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CiAKICAgICByZXR1cm4gZ2V0QnlP
ZmZzZXQ7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUq
IHZhbHVlKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAorICAgIE5v
ZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsCisgICAgTm9kZSogdmFs
dWUpCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNl
dChvZmZzZXQpKQpAQCAtMjMzMiw2ICsyMzM2LDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAg
ICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKKyAgICBkYXRhLT5pbmZlcnJl
ZFR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgCiAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFw
aChQdXRCeU9mZnNldCwgT3BJbmZvKGRhdGEpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVl
KTsKICAgICAKQEAgLTI0NDYsNyArMjQ1MSw4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2Fk
KAogICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLmNv
bnN0YW50KCkpKTsKICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlw
ZTogewogICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKG1ldGhvZC5wcm90b3R5cGUoKSkpOwotICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZz
ZXQocHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQo
KSwgb3ApOworICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBw
cmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBJ
bmZlcnJlZFR5cGU6OlRvcCwgb3ApOwogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9k
OjpMb2FkOgogICAgICAgICAvLyBXaWxsIG5ldmVyIHNlZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4K
QEAgLTI1NTIsMTMgKzI1NTgsMTMgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAg
CiAgICAgYm9vbCBuZWVkU3RydWN0dXJlQ2hlY2sgPSB0cnVlOwogICAgIAorICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07
CisgICAgCiAgICAgaWYgKEpTT2JqZWN0KiBrbm93bkJhc2UgPSBiYXNlLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTT2JqZWN0Kj4oKSkgewogICAgICAgICAvLyBUcnkgdG8gb3B0aW1pemUgYXdheSB0
aGUgc3RydWN0dXJlIGNoZWNrLiBOb3RlIHRoYXQgaXQncyBub3Qgd29ydGggZG9pbmcgYW55dGhp
bmcgYWJvdXQgdGhpcwogICAgICAgICAvLyBpZiB0aGUgYmFzZSdzIHN0cnVjdHVyZSBpcyB3YXRj
aGVkLgogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPmNvbnN0YW50KCktPnN0
cnVjdHVyZSgpOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkgewot
ICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyTnVtYmVyXTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCF2YXJp
YW50LmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCB3ZSdyZSBsb2FkaW5nIGZyb20gYSBwcm90b3R5cGUuIFdlIGV4cGVjdCB0aGUg
YmFzZSBub3QgdG8gaGF2ZSB0aGUKICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eS4gV2UgY2Fu
IG9ubHkgdXNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZiB0aGUgc3RydWN0dXJl
cyBpbiB0aGUKQEAgLTI2MjMsOSArMjYyOSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9h
ZCgKICAgICAgICAgICAgIGlmIChjb25zdGFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gd2Vh
a0pTQ29uc3RhbnQoY29uc3RhbnQpOwogICAgICAgICB9CisKKyAgICAgICAgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKKyAgICAgICAgaWYgKG5lZWRTdHJ1Y3R1cmVDaGVj
aykgeworICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCkpCisgICAgICAgICAgICAgICAgaW5mZXJyZWRUeXBlLm1lcmdlKG1fZ3JhcGgu
aW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAgICAgICAg
CiAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBs
b2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwg
bG9hZE9wKTsKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCB2YXJpYW50Lm9mZnNldCgpLCBpbmZlcnJlZFR5cGUsIGxvYWRPcCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGxvYWRlZFZhbHVlOwpAQCAtMjYzNiw3ICsyNjQ5LDcgQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VM
aWtlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZz
ZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0
KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKKyAgICByZXR1cm4g
aGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFy
aWFudC5pbmZlcnJlZFR5cGUoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeUlkKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIK
KyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlv
blNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5o
IgpAQCAtNDQ4LDYgKzQ0OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNo
aWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQp
OworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWVWYWx1ZSA9IG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSk7CiAKICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4
ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5vZGUgYWZ0ZXIgd2Ug
Z2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0
cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhp
bmdzIHRvIHRoaXMuCkBAIC00NjMsNyArNDY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMubnVtVmFyaWFudHMoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID4gMSAmJiAhaXNGVEwobV9ncmFwaC5tX3BsYW4u
bW9kZSkpCkBAIC02NjYsNiArNjY4LDggQEAgcHJpdmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVk
Z2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRl
eEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQs
IGluZGV4SW5CbG9jaywgb3JpZ2luLCBub2RlLT5jaGlsZDMoKS5ub2RlKCksIHZhcmlhbnQucmVx
dWlyZWRUeXBlKCkpOwogCiAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVk
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8g
VGhpcyBkb2N1bWVudHMgdGhlIERGRydzIGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6
IHNwZWNpZmljYWxseSwgdGhhdCB3ZSB3YW50IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJbmZlcnJl
ZFR5cGUgb2JqZWN0IGFuZCB0aGF0IHRoaXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9y
aWdpbmFsbHkgc2F3LgorCitjbGFzcyBEZXNpcmVkSW5mZXJyZWRUeXBlIHsKK3B1YmxpYzoKKyAg
ICBEZXNpcmVkSW5mZXJyZWRUeXBlKCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgRGVzaXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9i
amVjdCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAgICAgICAg
OiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkKKyAgICB7
CisgICAgfQorCisgICAgRGVzaXJlZEluZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2V4cGVj
dGVkKFRvcCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlw
ZSogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3IgZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAg
ICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmpl
Y3QtPmNhbldhdGNoKG1fZXhwZWN0ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9p
bnQqIHdhdGNocG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hw
b2ludCh3YXRjaHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9v
YmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3Ro
ZXIubV9leHBlY3RlZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0g
VG9wOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6UHRySGFzaDxJbmZlcnJlZFR5cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4
cGVjdGVkLmhhc2goKSAqIDc7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAg
b3V0LnByaW50KGluQ29udGV4dChtX2V4cGVjdGVkLCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9p
bnRlcihtX29iamVjdCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUqIG1fb2JqZWN0OworICAgIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvciBtX2V4cGVjdGVkOworfTsKKworc3RydWN0IERlc2lyZWRJbmZlcnJl
ZFR5cGVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBhLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJl
ZEluZmVycmVkVHlwZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5
cGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0
czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJl
ZFR5cGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRU
eXBlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAko
cmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQCB2b2lkIEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6CiAgICAgfQogfQogCit2b2lkIEluZmVy
cmVkVHlwZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZElu
ZmVycmVkVHlwZSYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAga2V5LmFkZChjb21t
b24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCiBEZXNpcmVkV2F0Y2hwb2ludHM6
OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogRGVzaXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdh
dGNocG9pbnRzKCkgeyB9CiAKQEAgLTkzLDYgKzk4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9p
bnRzOjphZGRMYXppbHkoY29uc3QKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXpp
bHkoa2V5KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBE
ZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCit7CisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemls
eShrZXkpOworfQorCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBA
IC0xMDgsNiArMTE4LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2Rl
QgogICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7
CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAg
ICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRh
KTsKKyAgICBtX2luZmVycmVkVHlwZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7
CiB9CiAKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAg
LTExNiw3ICsxMjcsOCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgp
CiAgICAgICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9p
bmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5h
cmVTdGlsbFZhbGlkKCkKLSAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3Rp
bGxWYWxpZCgpOworICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZh
bGlkKCkKKyAgICAgICAgJiYgbV9pbmZlcnJlZFR5cGVzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAog
dm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CkBAIC0xMjcsNiArMTM5LDcgQEAgdm9pZCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVy
cmVkIHZhbHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4i
KTsKICAgICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZl
clZpZXdzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3Bl
cnR5IGNvbmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29u
dGV4dCksICJcbiIpOworICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNv
bnRleHQobV9pbmZlcnJlZFR5cGVzLCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0Nv
bW1vbkRhdGEuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVk
ZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5j
bHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKQEAgLTkxLDYgKzkyLDE4IEBAIHN0cnVj
dCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG8KICAgICB9CiB9OwogCitzdHJ1Y3Qg
SW5mZXJyZWRUeXBlQWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNv
bnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wg
aGFzQmVlbkludmFsaWRhdGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiAha2V5LmlzU3RpbGxWYWxpZCgpOworICAgIH0KKyAgICBzdGF0aWMg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IERlc2lyZWRJbmZlcnJl
ZFR5cGUmIGtleSwgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJp
bnQoaW5Db250ZXh0KGtleSwgY29udGV4dCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVu
YW1lIFdhdGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0
b3I8V2F0Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMTU5LDYgKzE3MiwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVz
ZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1aXJl
ZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9pZCBh
ZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIEl0J3Mg
cmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6
OmluZmVycmVkVHlwZUZvcigpLCB3aGljaCBkb2VzCisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1h
Z2ljLgorICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmKTsKICAg
ICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIApAQCAtMTg2LDYgKzIwMywx
MCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMuaXNXYXRjaGVkKGtleSk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZmVycmVkVHlw
ZXMuaXNXYXRjaGVkKGtleSk7CisgICAgfQogCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKQEAgLTE5Niw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVy
cmVkVmFsdWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZp
ZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAg
ICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsK
KyAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVy
cmVkVHlwZUFkYXB0b3I+IG1faW5mZXJyZWRUeXBlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Miw2ICsxMDkyLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkK
ICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LCBtX2luZGV4SW5CbG9jaywgbm9kZS0+b3JpZ2luLCBub2RlLT5jaGlsZDMoKS5ub2Rl
KCksCisgICAgICAgICAgICAgICAgbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKS5pbmZlcnJlZFR5
cGUpOwogICAgICAgICAgICAgc3BlY3VsYXRlRm9yQmFycmllcihub2RlLT5jaGlsZDMoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODcsNiArODg3LDUwIEBAIGJv
b2wgR3JhcGg6OmlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwKICAgICByZXR1cm4gbV9zYWZl
VG9Mb2FkLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOwogfQogCitJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgR3JhcGg6OmluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0
eVR5cGVLZXkmIGtleSkKK3sKKyAgICBhc3NlcnRJc1JlZ2lzdGVyZWQoa2V5LnN0cnVjdHVyZSgp
KTsKKyAgICAKKyAgICBhdXRvIGl0ZXIgPSBtX2luZmVycmVkVHlwZXMuZ2V0KGtleSk7CisgICAg
aWYgKGl0ZXIgIT0gbV9pbmZlcnJlZFR5cGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+
dmFsdWU7CisKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGVPYmplY3QgPSBrZXkuc3RydWN0dXJlKCkt
PmluZmVycmVkVHlwZUZvcihrZXkudWlkKCkpOworICAgIGlmICghdHlwZU9iamVjdCkgeworICAg
ICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAg
ICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIHR5cGVEZXNjcmlwdG9yID0gdHlwZU9iamVjdC0+ZGVzY3JpcHRvcigpOworICAg
IGlmICghdHlwZURlc2NyaXB0b3IuaXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgbV9pbmZlcnJl
ZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVy
cmVkVHlwZTo6VG9wOworICAgIH0KKyAgICAKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwg
dHlwZURlc2NyaXB0b3IpOworCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0
eXBlT2JqZWN0KTsKKyAgICBpZiAodHlwZURlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAg
IHJlZ2lzdGVyU3RydWN0dXJlKHR5cGVEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKworICAgIC8v
IE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0aGlzIGRlc2lyZWQgaW5mZXJy
ZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1heQorICAgIC8vIHBvaW50IHRv
IHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KKyAgICBtX3BsYW4ud2F0Y2hwb2ludHMu
YWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlwZURlc2NyaXB0b3Ip
KTsKKworICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKK30KKworYm9vbCBHcmFwaDo6d2F0Y2hE
ZXNpcmVkVHlwZShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCit7CisgICAgaWYgKCFr
ZXkuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGxhbi53
ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5Lm9iamVjdCgpKTsKKyAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBrZXkuZXhwZWN0ZWQoKS5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgcmVnaXN0
ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICBtX3BsYW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5
KGtleSk7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1
ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVM
aXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0xMDYxLDcgKzExMDUsNyBAQCBKU1ZhbHVlIEdy
YXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25z
dGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgaWYgKHN0cnVj
dHVyZS5pc0luZmluaXRlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGp1c3QgY29udmVy
dGVkIHRoZSBvZmZzZXQgdG8gYSB1aWQsIHdlIGNvdWxkIGRvIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uCiAgICAgICAgIC8vIHdhdGNoaW5nIHRvIGNvbnN0YW50LWZvbGQgdGhlIHByb3BlcnR5Lgog
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3Mjcx
CkBAIC0xMDc2LDYgKzExMjAsMzUgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eShjbwogICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UubV92YWx1ZSwg
YmFzZS5tX3N0cnVjdHVyZSwgb2Zmc2V0KTsKIH0KIAorQWJzdHJhY3RWYWx1ZSBHcmFwaDo6aW5m
ZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkK
K3sKKyAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICBiYXNlLmZvckVhY2goCisgICAgICAg
IFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUg
dmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXQoKnRoaXMsIGluZmVycmVkVHlwZUZvclByb3Bl
cnR5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgICAgICAgICByZXN1bHQubWVyZ2UodmFsdWUpOwor
ICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBYnN0cmFjdFZhbHVlIEdyYXBo
OjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIFN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgaWYgKEpTVmFsdWUgdmFs
dWUgPSB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UsIG9mZnNldCkpIHsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5zZXQoKnRoaXMsICpmcmVlemUodmFs
dWUpLCBjbG9iYmVyU3RhdGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IGlmIChiYXNlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCisgICAgICAgIHJldHVybiBpbmZlcnJl
ZFZhbHVlRm9yUHJvcGVydHkoYmFzZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkLCBjbG9iYmVyU3Rh
dGUpOworCisgICAgcmV0dXJuIEFic3RyYWN0VmFsdWU6OmhlYXBUb3AoKTsKK30KKwogSlNWYWx1
ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVPZmZz
ZXQgb2Zmc2V0KQogewogICAgIC8vIFRoaXMgaGFzIGFuIGF3ZXNvbWUgY29uY3VycmVuY3kgc3Rv
cnkuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIgaW4gQnl0ZUNvZGVQYXJzZXIuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODk3NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
NSw2ICs2NzUsMjEgQEAgcHVibGljOgogICAgIC8vIENoZWNrcyBpZiBpdCdzIGtub3duIHRoYXQg
bG9hZGluZyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBmaW5l
LiBUaGlzIGlzCiAgICAgLy8gY29tcHV0ZWQgYnkgdHJhY2tpbmcgd2hpY2ggY29uZGl0aW9ucyB3
ZSB0cmFjayB3aXRoIHdhdGNoQ29uZGl0aW9uKCkuCiAgICAgYm9vbCBpc1NhZmVUb0xvYWQoSlNP
YmplY3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKKworICAgIC8vIFRlbGxzIHVzIHdoYXQgaW5m
ZXJyZWQgdHlwZSB3ZSBhcmUgYWJsZSB0byBwcm92ZSB0aGUgcHJvcGVydHkgdG8gaGF2ZSBub3cg
YW5kIGluIHRoZSBmdXR1cmUuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVk
VHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVLZXkmKTsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3IgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICByZXR1cm4gaW5mZXJyZWRUeXBlRm9y
KFByb3BlcnR5VHlwZUtleShzdHJ1Y3R1cmUsIHVpZCkpOworICAgIH0KKworICAgIEFic3RyYWN0
VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7
CisKKyAgICAvLyBUaGlzIHVzZXMgZWl0aGVyIGNvbnN0YW50IHByb3BlcnR5IGluZmVyZW5jZSBv
ciBwcm9wZXJ0eSB0eXBlIGluZmVyZW5jZSB0byBkZXJpdmUgYSBnb29kIGFic3RyYWN0CisgICAg
Ly8gdmFsdWUgZm9yIHNvbWUgcHJvcGVydHkgYWNjZXNzZWQgd2l0aCB0aGUgZ2l2ZW4gYWJzdHJh
Y3QgdmFsdWUgYmFzZS4KKyAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0
eSgKKyAgICAgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CiAgICAgCiAgICAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKQEAgLTg1Niw2
ICs4NzEsNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9w
dHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgSGFzaE1h
cDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+IG1fYnl0ZWNvZGVL
aWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFByb3BlcnR5T2Zmc2V0Pj4g
bV9zYWZlVG9Mb2FkOworICAgIEhhc2hNYXA8UHJvcGVydHlUeXBlS2V5LCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9y
czsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFs
TG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luZmVycmVkVHlwZUNoZWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hl
Y2suaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0SW5mZXJyZWRU
eXBlQ2hlY2soCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIGJhc2VOb2RlLAorICAgIGNvbnN0IEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBvcmlnaW4pOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdp
biwgRWRnZShCb29sZWFuVXNlLCBiYXNlTm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoT3RoZXJVc2UsIGJhc2VO
b2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoK
KyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hl
Y2ssIG9yaWdpbiwgRWRnZShJbnQzMlVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShOdW1iZXJV
c2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpTdHJpbmc6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3Bl
Y05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoU3RyaW5nVXNlLCBiYXNlTm9kZSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGlu
c2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSksCisg
ICAgICAgICAgICBFZGdlKENlbGxVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0Lmdy
YXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIEVk
Z2UoQ2VsbE9yT3RoZXJVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoT2JqZWN0VXNlLCBiYXNl
Tm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
T3JPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShPYmplY3RPck90aGVyVXNlLCBiYXNlTm9kZSkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkdHlwZTo6VG9wOgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgREZHX0NSQVNIKGluc2VydGlvblNldC5ncmFwaCgpLCBiYXNl
Tm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKyNkZWZpbmUgREZH
SW5mZXJyZWRUeXBlQ2hlY2tfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBJbnNlcnRzIGEgdHlwZSBjaGVjayB0aGF0IGVu
c3VyZXMgdGhhdCBiYXNlTm9kZSBoYXMgdGhlIGdpdmVuIGluZmVycmVkIHR5cGUuCit2b2lkIGlu
c2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgTm9kZU9yaWdpbiwgTm9kZSogYmFzZU5vZGUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCwxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jazsKIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7
CisKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGtub3cgdGhlIGluZmVycmVkIHR5cGUuIEZvciBwdXRz
LCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gcmVtZW1iZXIKKyAgICAvLyB3
aGF0IGNoZWNrIGlzIG5lZWRlZC4gRm9yIGdldHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ug
b3RoZXJ3aXNlIEFJIG1pZ2h0IGZvcmdldCB3aGF0IHR5cGUgaXMKKyAgICAvLyBndWFyYW50ZWVk
LgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CiB9OwogCiBzdHJ1
Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR1Byb3BlcnR5VHlwZUtleV9oCisjZGVmaW5lIERGR1Byb3BlcnR5VHlwZUtl
eV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBvYmplY3QgaXMgYSBr
ZXkgZm9yIGZpbmRpbmcgYSBwcm9wZXJ0eSdzIHR5cGUuIEl0J3MgYSB0dXBsZSBvZiBTdHJ1Y3R1
cmUqIGFuZCBVbmlxdWVkU3RyaW5nSW1wbCouCisKK2NsYXNzIFByb3BlcnR5VHlwZUtleSB7Citw
dWJsaWM6CisgICAgUHJvcGVydHlUeXBlS2V5KCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxs
cHRyKQorICAgICAgICAsIG1fdWlkKG51bGxwdHIpCisgICAgeworICAgIH0KKworICAgIFByb3Bl
cnR5VHlwZUtleShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
KyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgICwgbV91aWQodWlkKQor
ICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV91aWQo
ZGVsZXRlZFVJRCgpKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgJiYgbV91aWQ7IH0KKworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICBQcm9wZXJ0
eU9mZnNldCB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1f
dWlkID09IG90aGVyLm1fdWlkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQ
cm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVy
ZSkgKyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCk7CisgICAg
fQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fdWlkID09IGRlbGV0ZWRVSUQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRl
eHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKyIsIG1fdWlkKTsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBjb250ZXh0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFVuaXF1ZWRT
dHJpbmdJbXBsKiBkZWxldGVkVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBtX3VpZDsKK307CisKK3N0cnVjdCBQcm9wZXJ0eVR5cGVLZXlIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYSwg
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6
UHJvcGVydHlUeXBlS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQ
cm9wZXJ0eVR5cGVLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0
eVR5cGVLZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHUHJvcGVydHlUeXBlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4OTc2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgogICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAg
IGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMzIsNiArNTIzMiw4MCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
Tm9kZSogbm9kZSwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIEFTU0VS
VChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOworICAgIAorICAgIGlmIChub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAw
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxHUFJUZW1wb3Jhcnk+IHN0cnVjdHVyZTsKKyAgICAgICAgR1BSUmVnIHN0
cnVjdHVyZUdQUjsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZW1wR1BSID09IEludmFsaWRHUFIp
IHsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8R1BSVGVtcG9yYXJ5
Pih0aGlzKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS0+Z3ByKCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gdGVtcEdQUjsKKyAgICAg
ICAgCisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkg
eworICAgICAgICAgICAgZG9uZS5hcHBlbmQoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
V2Vha1N0cnVjdHVyKEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1
Y3R1cmVTZXQoKVtpXSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAorICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGNlbGxHUFIpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+
c3RydWN0dXJlU2V0KCkubGFzdCgpKSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVj
dHVyZShOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgY2FzZSBDZWxsVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNl
bGwodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
bm9kZSwgY2VsbC5ncHIoKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogewor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAg
ICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGNlbGwgPSBtX2ppdC5icmFuY2hJZkNlbGwodmFsdWVSZWdzKTsKKyAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCisgICAgICAgICAgICB2YWx1ZVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCBTcGVj
Q2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIodmFs
dWVSZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CisgICAgICAgIGNlbGwubGluaygmbV9qaXQpOworICAgICAgICBjb21waWxlQ2hl
Y2tTdHJ1Y3R1cmUobm9kZSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdGVtcEdQUik7CisgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBub1Jlc3VsdCh0aGlzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChtX2ppdC5n
cmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShO
b2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3Vs
ZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CkBAIC01NjM2LDYgKzU3MTAsMjIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbChFZGdlIAogICAgIChTcGVjdWxhdGVDZWxsT3BlcmFu
ZCh0aGlzLCBlZGdlKSkuZ3ByKCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2Us
IFNwZWNDZWxsIHwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFs
dWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAu
Z3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5jaElmQ2Vs
bChvcGVyYW5kLmpzVmFsdWVSZWdzKCkpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBv
cGVyYW5kLmpzVmFsdWVSZWdzKCksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAg
ICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgdGVtcEdQUikp
OworICAgIG9rLmxpbmsoJm1faml0KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlT2JqZWN0KEVkZ2UgZWRnZSkKIHsKICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNw
ZWNPYmplY3QpKQpAQCAtNTkxNiw2ICs2MDA2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChlZGdlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAg
ICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
T2JqZWN0VXNlOgogICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjE1LDYgKzIyMTUsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUlzRnVuY3Rpb24oTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVR5cGVPZihOb2RlKik7CisgICAg
dm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSosIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcg
dGVtcEdQUik7CisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIAog
ICAgIHZvaWQgbW92ZVRydWVUbyhHUFJSZWcpOwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVn
KTsKQEAgLTIzNzQsNiArMjM3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZURvdWJs
ZVJlcFJlYWwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UpOwogICAgIHZv
aWQgc3BlY3VsYXRlQ2VsbChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVk
Z2UpOwogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRl
RnVuY3Rpb24oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcg
KzE5Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBvcGVyYXRvcltd
KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIAorCiAgICAgLy8gSW4gbW9z
dCBjYXNlcywgd2hhdCB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXMgdmVyaWZ5IHdoZXRoZXIgdGhl
IHNldCBpcyB0b3Agb3IgY2xvYmJlcmVkLCBhbmQKICAgICAvLyBpZiBub3QsIGVudW1lcmF0ZSB0
aGUgc2V0IG9mIHN0cnVjdHVyZXMuIFVzZSB0aGlzIG9ubHkgaW4gY2FzZXMgd2hlcmUgdGhlIHNp
bmdsZXRvbiBjYXNlIGlzCiAgICAgLy8gbWVhbmluZ2Z1bGx5IHNwZWNpYWwsIGxpa2UgZm9yIHRy
YW5zaXRpb25zLgpAQCAtMjAyLDYgKzIwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIG1fc2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgp
KTsKKyAgICAgICAgbV9zZXQuZm9yRWFjaChmdW5jdG9yKTsKKyAgICB9CiAgICAgCiAgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBLbm93
bkNlbGxVc2U6CiAgICAgICAgIG91dC5wcmludCgiS25vd25DZWxsIik7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGxPck90
aGVyIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgb3V0
LnByaW50KCJPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBA
IGVudW0gVXNlS2luZCB7CiAgICAgS25vd25Cb29sZWFuVXNlLAogICAgIENlbGxVc2UsCiAgICAg
S25vd25DZWxsVXNlLAorICAgIENlbGxPck90aGVyVXNlLAogICAgIE9iamVjdFVzZSwKICAgICBG
dW5jdGlvblVzZSwKICAgICBGaW5hbE9iamVjdFVzZSwKQEAgLTEwOCw2ICsxMDksOCBAQCBpbmxp
bmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgY2FzZSBDZWxsVXNlOgog
ICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2Fz
ZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsIHwgU3BlY090aGVyOwog
ICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKICAgICBjYXNl
IEZ1bmN0aW9uVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4LDcg
QEAgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAg
ICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToK
ICAgICAgICAgICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNl
IENlbGxPck90aGVyVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAg
ICAgICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RP
ck90aGVyVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDIxICsy
MDI2LDU2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
KQogICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAKICAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7CiAgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRD
b25zdGFudENhY2hlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENh
Y2hlOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMy
KGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgCi0gICAgICAgIGNo
ZWNrU3RydWN0dXJlKAotICAgICAgICAgICAgc3RydWN0dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxs
KSwgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBbdGhpc10g
KFN0cnVjdHVyZSogc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1
Y3R1cmVJRChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKKyAg
ICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVl
KGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgp
LAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tT
dHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJl
IENlbGxPck90aGVyVXNlIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENl
bGxPck90aGVyVXNlIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RD
ZWxsQ2FzZSk7CisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBt
X291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFs
dWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0
KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGls
ZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgpCkBAIC00MDIyLDYgKzQwNTcs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsg
MSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKKworICAgICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUobV9ub2RlLT5jaGlsZDIoKSwg
dmFsdWUsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBMVmFsdWUgc3RvcmFnZTsKICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6UmVwbGFjZSkgewpAQCAtNTY2OSw2ICs1NzA2LDEzNCBAQCBwcml2YXRlOgog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cyk7CiAgICAgfQorCisgICAgdm9p
ZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBjYW5ub3Qg
dXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVjaygpIGJlY2F1c2UgaXQgaXMgY2FsbGVkIHBh
cnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBN
dWx0aVB1dEJ5T2Zmc2V0KC4uLikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gbWF5IGJlIGxvd2Vy
ZWQgdG86CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0
dXJlKSB7CisgICAgICAgIC8vICAgICBjYXNlIDQyOgorICAgICAgICAvLyAgICAgICAgIGNoZWNr
SW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAg
ICAvLyAgICAgICAgIGJyZWFrOworICAgICAgICAvLyAgICAgY2FzZSA0MzoKKyAgICAgICAgLy8g
ICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUyKTsKKyAgICAgICAgLy8gICAgICAg
ICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgIH0KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gd2hlcmUgdHlwZTEgYW5kIHR5cGUyIGFyZSBkaWZmZXJlbnQuIFVz
aW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWRnZSB3b3VsZCBiZQorICAgICAg
ICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUyLCBpbnN0ZWFkIG9mIHR5cGUxIHwgdHlwZTIu
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBp
c05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEludDMy
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3ROdW1iZXIodmFsdWUs
IHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5
cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSk7CisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUu
aXNTdWJzZXRPZih0eXBlLnN0cnVjdHVyZSgpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1
Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVj
a0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjZWxsIGNhc2UiKSk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgbm90IGNlbGwg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxD
YXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZh
bHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YodHlwZS5zdHJ1Y3R1cmUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291
dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vh
a1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZSAmIH5TcGVjQ2VsbCkpOworCisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNO
b3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T2JqZWN0KHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBP
YmplY3RPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENl
bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RP
ck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9y
T3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENl
bGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LAorICAgICAgICAgICAgICAgIGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYg
U3BlY0NlbGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFs
dWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKKworICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGluZmVycmVkIHR5
cGUiKTsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvYWRQcm9wZXJ0eShMVmFsdWUgc3RvcmFn
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogICAg
IHsKQEAgLTc1MDksNiArNzY3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToK
ICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90
aGVyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS25vd25DZWxsVXNl
OgogICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2Up
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzU4OSw2ICs3NzU3LDIyIEBAIHByaXZhdGU6CiAg
ICAgICAgIGxvd0NlbGwoZWRnZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQ2Vs
bE9yT3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgIExCYXNpY0Js
b2NrIGlzTm90Q2VsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90
aGVyIG5vdCBjZWxsIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBjb250aW51YXRpb24iKSk7
CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSks
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaXNOb3RDZWxsKSk7CisKKyAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05vdENlbGwsIGNvbnRpbnVhdGlv
bik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNw
ZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVNYWNoaW5lSW50KEVk
Z2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVj
ayhlZGdlKSkKQEAgLTgxMjIsNiArODMwNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuRmFs
c2UpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUuaml0
Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuc2l6
ZSgpKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBl
bmQoT1NSRXhpdCgKQEAgLTgxMzAsOSArODMxNywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAg
ICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlv
bkluZm8oKSk7Ci0gICAgICAgIAorCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQubGFzdCgpOwogCisgICAgICAgIGlmIChmYWlsQ29uZGl0aW9uID09
IG1fb3V0LmJvb2xlYW5UcnVlKSB7CisgICAgICAgICAgICBlbWl0T1NSRXhpdENhbGwoZXhpdCwg
bG93VmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRyOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBudWxscHRyOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNiArNTUsNzAgQEAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEFzc2VtYgog
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogfQogCitBc3NlbWJseUhlbHBlcnM6
Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RUeXBlKAorICAgIEpTVmFsdWVS
ZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCit7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7CisK
KyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvdHRvbToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChqdW1wKCkpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVt
YmVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3MpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaFN0cnVjdHVyZShyZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihy
ZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVn
cykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShyZWdzLnBheWxvYWRH
UFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0Ogor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogeworICAg
ICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIG9rLmxpbmso
dGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpU
b3A6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4oRlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hEb3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnBy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
cmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzE5LDYgKzcxOSw4IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIH0KIAorICAgIEp1bXBMaXN0IGJyYW5jaElmTm90VHlwZShKU1ZhbHVlUmVncyByZWdz
LCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAxODk3NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzcsNyArMzc3LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgcHRyZGlmZl90IG9mZnNldFRvUGF0Y2hlZFN0
b3JhZ2UgPSBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CiAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5z
ZXQKICAgICAgICAgICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVz
c09mZnNldChvZmZzZXRUb1BhdGNoZWRTdG9yYWdlKQotICAgICAgICAgICAgICAgICYmICFzdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAg
ICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAg
ICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CiAK
ICAgICAgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgICAgICAgICAgICAg
ICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19pbmZvID0geyAi
SW5mZXJyZWRUeXBlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGUpIH07
CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIElu
ZmVycmVkVHlwZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRU
eXBlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBz
dGF0aWNfY2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGUtPkluZmVy
cmVkVHlwZTo6fkluZmVycmVkVHlwZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVk
VHlwZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKworICAgIGlmIChpbmZlcnJlZFR5
cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZS5nZXQoKSk7Cit9CisKK0luZmVycmVkVHlwZTo6
S2luZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7Cisg
ICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2spIHsKKyAgICBjYXNlIFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBl
Qm90dG9tOgorICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICAgICAgY2FzZSBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICAg
ICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyOgorICAgICAgICAgICAgcmV0dXJuIE90
aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzI6CisgICAgICAgICAg
ICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXI6
CisgICAgICAgICAgICByZXR1cm4gTnVtYmVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlU3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgY2FzZSBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3Q7Cisg
ICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyOgorICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdE9yT3RoZXI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5
cGVUb3A6CisgICAgICAgICAgICByZXR1cm4gVG9wOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBC
b3R0b207CisgICAgICAgIH0KKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJlOworICAgIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHJl
dHVybiBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQm90dG9tOworICAg
IH0KK30KKworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
cjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkp
CisgICAgICAgIHJldHVybiBCb29sZWFuOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIEludDMyOworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm4gTnVtYmVyOworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBKU0NlbGwq
IGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkg
eworICAgICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKE9i
amVjdFdpdGhTdHJ1Y3R1cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRvcDsKK30KKworSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9yRmxhZ3MoVk0m
IHZtLCBQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7CisgICAgS2luZCBraW5kID0ga2luZEZvckZsYWdz
KGZsYWdzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBpZiAoaGFzU3RydWN0dXJl
KGtpbmQpKQorICAgICAgICBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQoZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKTsKKyAgICBlbHNlCisgICAgICAgIHN0cnVjdHVy
ZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIERlc2NyaXB0b3Ioa2luZCwgc3RydWN0dXJlKTsKK30K
KworUHV0QnlJZEZsYWdzIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cHV0QnlJZEZsYWdzKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAgICAg
ICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5
cGVCb3R0b207CisgICAgY2FzZSBCb29sZWFuOgorICAgICAgICByZXR1cm4gUHV0QnlJZFByaW1h
cnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuOworICAgIGNhc2Ug
T3RoZXI6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZU90aGVyOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBQ
dXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyOwor
ICAgIGNhc2UgTnVtYmVyOgorICAgICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25k
YXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXI7CisgICAgY2FzZSBTdHJpbmc6CisgICAg
ICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZVN0cmluZzsKKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmlt
YXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0OworICAgIGNhc2Ug
T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFy
eSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcjsKKyAgICBjYXNlIFRvcDoKKyAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlVG9wOworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmV0dXJu
IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmUgfCBlbmNvZGVTdHJ1Y3R1cmVJ
RChtX3N0cnVjdHVyZS0+aWQoKSk7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjoKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyIHwgZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQdXRCeUlkTm9uZTsK
K30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0
b3ImIG90aGVyKQoreworICAgIGlmICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0
aGlzID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2Fz
ZSBTdHJpbmc6CisgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0Ogor
ICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBO
dW1iZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2Ug
TnVtYmVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
KnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAg
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAg
ICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVy
ZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRo
aXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9i
amVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
c3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoK
KyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmpl
Y3RPck90aGVyOgorICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2Jq
ZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
Y2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE90aGVy
OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIFRvcDoK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpyZW1vdmVTdHJ1Y3R1cmUo
KQoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsK
KyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpzdWJzdW1lcyhjb25zdCBEZXNjcmlw
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBEZXNjcmlwdG9yIG1lcmdlZCA9ICp0aGlzOworICAg
IG1lcmdlZC5tZXJnZShvdGhlcik7CisgICAgcmV0dXJuICp0aGlzID09IG1lcmdlZDsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2lu
ZCk7CisgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICBvdXQucHJpbnQoIjoiLCBpbkNvbnRl
eHQoKm1fc3RydWN0dXJlLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4
dChvdXQsIG51bGxwdHIpOworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZShWTSYgdm0p
CisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBt
X3dhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQoreworfQorCitJbmZlcnJlZFR5cGU6On5J
bmZlcnJlZFR5cGUoKQoreworfQorCitib29sIEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0
ZWQpCit7CisgICAgaWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3ApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpID09IGV4cGVjdGVkOwor
fQorCitib29sIEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKGNvbnN0IERlc2NyaXB0b3ImIGV4
cGVjdGVkKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
cmV0dXJuIGlzU3RpbGxWYWxpZChsb2NrZXIsIGV4cGVjdGVkKTsKK30KKwordm9pZCBJbmZlcnJl
ZFR5cGU6OmFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBX
YXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGRlc2NyaXB0b3Io
bG9ja2VyKS5raW5kKCkgIT0gVG9wKTsKKworICAgIG1fd2F0Y2hwb2ludFNldC5hZGQod2F0Y2hw
b2ludCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQq
IHdhdGNocG9pbnQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICBhZGRXYXRjaHBvaW50KGxvY2tlciwgd2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgSW5mZXJy
ZWRUeXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIodGhpcyksICI6IiwgZGVzY3JpcHRvcigpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6OndpbGxTdG9yZVZhbHVlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBEZXNjcmlwdG9yIG15VHlwZSA9
IGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICBEZXNjcmlwdG9yIG90aGVyVHlwZSA9IERlc2NyaXB0
b3I6OmZvclZhbHVlKHZhbHVlKTsKKworICAgIG15VHlwZS5tZXJnZShvdGhlclR5cGUpOworCisg
ICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0
IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgc2V0KGxvY2tl
ciwgdm0sIG15VHlwZSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYg
dm0pCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQo
bG9ja2VyLCB2bSwgVG9wKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9y
KQoreworICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5n
IG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAor
ICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9j
ay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGgg
c28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVy
R0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6
IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2
ZSB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2Ny
aXB0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0
IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rl
c2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUg
bmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9u
bHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0
cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCgh
ZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKTsKKworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRo
YXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElm
CisgICAgLy8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNv
IHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dh
dGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2Ug
Y2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdk
IGFscmVhZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRl
KCkgIT0gSXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhw
ZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0
Y2ggdGhpcyB0eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3Vt
ZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3Jl
IHRoaW5ncyBmb3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7
CisKKyAgICAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoIkluZmVycmVkIHR5cGUgY2hhbmdl
ZCIpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9i
amVjdCBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkpCisgICAgICAgIG1fc3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgIC8vIEFkZCBh
IG5ldyBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgorICAgIGlm
IChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkg
eworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdl
IGdldCBoZXJlLgorICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkg
PT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odGhp
cywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9y
LnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChtX3N0cnVjdHVyZS5nZXQoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Ig
a2luZC4KKyAgICBtX2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2Vy
dCB0aGF0IHdlIGRpZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBu
ZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgp
Cit7CisgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX3BhcmVudC0+bV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlw
dG9yIG5ld0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRv
ci5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3Jp
cHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJy
ZWRTdHJ1Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3Ry
dWN0dXJlKQoreworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmZp
cmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikKK3sKKyAgICBtX3BhcmVudC0+cmVtb3ZlU3Ry
dWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKG1fcGFy
ZW50KS0+dm0oKTsKKworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChtX3BhcmVudCkpOworICAg
IAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQorICAgICAgICBt
X3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVHlwZTo6S2luZCBraW5kKQoreworICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIG91
dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT3Ro
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIG91dC5wcmlu
dCgiU3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6
CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RP
ck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgor
ICAgICAgICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luZmRlZiBJbmZlcnJlZFR5cGVfaAorI2RlZmlu
ZSBJbmZlcnJlZFR5cGVfaAorCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNs
dWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZlcmVuY2Ugb2YgdGhl
IHR5cGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgorCitjbGFzcyBJbmZlcnJlZFR5cGUgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisg
ICAgc3RhdGljIEluZmVycmVkVHlwZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisK
KyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAorICAgICAgICBCb29s
ZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAgIE51bWJlciwKKyAg
ICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAgICAgICBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBPYmplY3RP
ck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisgICAgS2luZCBraW5kRm9yRmxhZ3MoUHV0
QnlJZEZsYWdzKTsKKyAgICAKKyAgICBib29sIGhhc1N0cnVjdHVyZShLaW5kIGtpbmQpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIERlc2NyaXB0b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQoQm90dG9tKQor
ICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBu
dWxscHRyKQorICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAgICwgbV9zdHJ1
Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
RGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRv
ciBmb3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
Qm90dG9tICYmICFtX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKKyAgICAgICAgUHV0QnlJZEZsYWdzIHB1
dEJ5SWRGbGFncygpIGNvbnN0OworCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmNsdWRl
c1ZhbHVlKEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgICAgICAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzQm9vbGVhbigpOworICAgICAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICAgICAgICAgIGNhc2Ug
SW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKyAgICAgICAg
ICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc051bWJlcigp
OworICAgICAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmlzU3RyaW5nKCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBU
b3A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAgICAg
JiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV1RG
OjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSBeIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX2tpbmQpOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgbWVyZ2UoY29u
c3QgRGVzY3JpcHRvciYpOworICAgICAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRlc2NyaXB0b3IgaXMgbW9yZSBnZW5lcmFsIHRo
YW4gdGhlIG90aGVyIG9uZS4KKyAgICAgICAgYm9vbCBzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9y
JikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBLaW5kIG1fa2luZDsKKyAgICAgICAgU3RydWN0dXJl
KiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSBj
b25zdCB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvck1haW5U
aHJlYWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9raW5kLCBt
X3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgIH0K
KyAgICAKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsK
KyAgICB9CisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBkZXNj
cmlwdG9yKGxvY2tlcik7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0b3IoKS5raW5kKCk7
IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBs
b2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0b3IoKS5zdHJ1Y3R1cmUoKTsgfQorCisgICAg
Ym9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBUb3A7IH0KKyAgICBib29sIGlz
UmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUg
c3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBEZXNjcmlwdG9yIGN1cnJlbnREZXNjcmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsK
KyAgICAgICAgaWYgKGN1cnJlbnREZXNjcmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnREZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAg
IHJldHVybiB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBJ
bW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5cGUgaXJyZWxldmFudC4KKyAgICB2b2lkIG1ha2VUb3Ao
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1ha2VUb3BTbG93KHZtKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgaXQgY3VycmVudGx5IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZv
ciB0aGlzIGRlc2NyaXB0b3IuIE5vdGUgdGhhdAorICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0
dXJuIGZhbHNlIGZvciBUb3AuCisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNv
bnN0IERlc2NyaXB0b3ImKTsKKyAgICAKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRj
aHBvaW50KFdhdGNocG9pbnQqKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUo
KTsKKworICAgIHZvaWQgd2lsbFN0b3JlVmFsdWVTbG93KFZNJiwgSlNWYWx1ZSk7CisgICAgdm9p
ZCBtYWtlVG9wU2xvdyhWTSYpOworICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBWTSYsIERlc2NyaXB0b3IpOworICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAg
ICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2lu
ZCB7IEJvdHRvbSB9OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgOiBwdWJsaWMgV2F0
Y2hwb2ludCwgcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUoSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSop
OworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUuZ2V0KCk7IH07CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmlyZUludGVy
bmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5mZXJy
ZWRUeXBlKiBtX3BhcmVudDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1
Y3R1cmU7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4g
bV9zdHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdl
IHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBi
ZQorICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlz
IGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAg
Ly8gdGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5n
IHRoYXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNl
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFi
bGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVk
VHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVh
cCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBl
VGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVy
cmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9
CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5m
ZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBq
c0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fdGFibGUp
IHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bnRyeS52YWx1ZS5jbGVhcigpOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5
cGVUYWJsZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKKyAg
ICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcHJ1bmUgaW52
YWxpZGF0ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNSZWxldmFudCgpKSB7Cisg
ICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKK30KKworSW5mZXJyZWRUeXBlKiBJ
bmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZ2V0KGxvY2tlciwg
dWlkKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIGdldChwcm9wZXJ0eU5hbWUudWlkKCkp
OworfQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1ZSgKKyAgICBWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFN0b3JlZFByb3Bl
cnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBm
YWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICAKKyAg
ICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFR5cGVUYWJsZTo6aXRlcmF0b3Ig
aXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoaXRlciA9PSBt
X3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKyAgICAgICAgCisgICAgICAgIGlmIChpdGVy
LT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFR5cGVUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdDsKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
IHJlc3VsdCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZSwgV3JpdGVCYXJyaWVyPEluZmVycmVk
VHlwZT4oKSk7CisgICAgfQorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBJ
bmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6Y3JlYXRlKHZtKTsKKyAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5zZXQodm0sIHRoaXMsIGluZmVycmVkVHlwZSk7CisgICAgfSBlbHNlIGlmICghcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjptYWtlVG9w
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdl
KQoreworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBv
bmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIGlmIChhZ2UgPT0gT2xk
UHJvcGVydHkpIHsKKyAgICAgICAgVHlwZVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5m
aW5kKHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwg
IWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2Ug
PT4gdG9wLgorCisgICAgICAgIGl0ZXItPnZhbHVlLT5tYWtlVG9wKCk7CisgICAgICAgIGl0ZXIt
PnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBUeXBlVGFibGU6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5
cGU+KCkpOworICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1ha2VUb3AoKTsKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRh
YmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZl
cnJlZFR5cGVUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRU
eXBlVGFibGVfaAorI2RlZmluZSBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKyNpbmNsdWRlICJJbmZl
cnJlZFR5cGUuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IEEgdGFibGUgb2YgaW5mZXJyZWQgdHlwZXMgZm9yIHNvbWUgc3RydWN0dXJlLiBUaGlzIGlzIGEg
SlNDZWxsIGJlY2F1c2UgdGhhdCBzaW1wbGlmaWVzIHRoZSBTdHJ1Y3R1cmUKKy8vIGRlc3RydWN0
b3IgYW5kIG1ha2VzIGxpZmV0eXBlIGVhc2llciB0byBtYW5hZ2UuIEZvciBleGFtcGxlLCBzaW5j
ZSBpdCdzIGEgY2VsbCwgd2Uga25vdyB0aGF0IHRoaXMgdGhpbmcKKy8vIGNhbm5vdCBiZSBkZWxl
dGVkIHdoaWxlIHRoZSBERkcgaXMgcnVubmluZy4gVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIFByb3Bl
cnR5VGFibGUgYmVjYXVzZSBtb3N0IHByb3BlcnRpZXMKKy8vIHdpbGwgbm90IGhhdmUgYW4gSW5m
ZXJyZWRUeXBlLCBzaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJlIGluIGRpY3Rpb25hcmllcyAoaWYg
eW91IHRoaW5rIG9mICJhIHByb3BlcnR5IgorLy8gYXMgYmVpbmcgImEgcHJvcGVydHkgaW4gc29t
ZSBTdHJ1Y3R1cmUiKS4gQWxzbywgdGhpcyB3aWxsIGhhcHBpbHkgY29uZmxhdGUgdGhlIHR5cGVz
IG9mIHByb3BlcnRpZXMgZnJvbQorLy8gZGlmZmVyZW50IHN0cnVjdHVyZXMgZXZlbiBpZiB0aGUg
c3RydWN0dXJlcyByZXByZXNlbnQgZGlzam9pbnQgc2V0cyBvZiBvYmplY3RzLgorCitjbGFzcyBJ
bmZlcnJlZFR5cGVUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlVGFibGUqIGNyZWF0
ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2so
KSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQg
dHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBib3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1lYW5z
IEJvdHRvbSBpZiB0aGUKKyAgICAvLyBvd25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91
dCB0aGUgcHJvcGVydHkuCisgICAgSW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5p
cXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUpOwor
CisgICAgZW51bSBTdG9yZWRQcm9wZXJ0eUFnZSB7CisgICAgICAgIE5ld1Byb3BlcnR5LAorICAg
ICAgICBPbGRQcm9wZXJ0eQorICAgIH07CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIg
dGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8vIHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRo
YXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAgYm9v
bCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgU3RvcmVkUHJvcGVy
dHlBZ2UpOworCisgICAgLy8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4g
VXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAg
IHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCitw
cml2YXRlOgorICAgIEluZmVycmVkVHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVycmVkVHlwZVRh
YmxlKCk7CisKKyAgICAvLyBCb3R0b206IGFic2VuY2UgZnJvbSB0YWJsZS4KKyAgICAvLyBUb3A6
IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1ZS0+aXNSZWxldmFudCgpLCBvciBhYnNlbmNlIGZy
b20gdGFibGUuCisgICAgLy8KKyAgICAvLyBXZSBrbm93IGhvdyB0byBkZXRlcm1pbmUgaWYgYWJz
ZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0b20gb3IgdG9wIGRlcGVuZGluZyBvbiB3aGV0aGVy
IHRoZQorICAgIC8vIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIG93bmluZyBzdHJ1Y3R1cmUu
IEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSwgYWJzZW5jZSBtYXkgaGF2ZQorICAg
IC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRoaXMgY2xhc3MgZGV0ZXJtaW5l
cyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkKKyAgICAvLyBp
cyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhY3Rpb25zOiByZXBsYWNlIG9yIHRyYW5z
aXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5ldyBwcm9wZXJ0eQorICAgIC8vICh0cmFuc2l0aW9u
KSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRvbS4gSWYgd2UncmUgc3RvcmluZyB0byBhbiBleGlz
dGluZyBwcm9wZXJ0eSAocmVwbGFjZSwgdGhlbgorICAgIC8vIGFic2VuY2UgbWVhbnMgdG9wLiBU
byBtYWtlIHRoaXMgd29yaywgd2UgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHRoZSBjYXNlIHdoZXJl
IHR3byBzdHJ1Y3R1cmVzLCBTMSBhbmQKKyAgICAvLyBTMiwgc2hhcmUgdGhlIHNhbWUgSW5mZXJy
ZWRUeXBlVGFibGUgYW5kIG5laXRoZXIgb2YgdGhlbSBpbml0aWFsbHkga25vdyBhYm91dCBwcm9w
ZXJ0eSBQLiBTMSBtYXkKKyAgICAvLyB3YW50IHRvIGFkZCBQIHdpdGhvdXQgYSB0eXBlLCB3aGls
ZSBTMiBtYXkgd2FudCB0byBhZGQgUCB3aXRoIGEgdHlwZS4gSWYgUzEgYWRkZWQgUCBhbmQgdXNl
ZCBhYnNlbmNlCisgICAgLy8gdG8gaW5kaWNhdGUgVG9wLCB0aGVuIFMyIHdvdWxkIHVzZSB0aGF0
IGFic2VuY2UgdG8gbWVhbiBCb3R0b20gYW5kIHdvdWxkIGVuZCB1cCBjcmVhdGluZyBhIG5vbi1U
b3AKKyAgICAvLyBlbnRyeSBpbiB0aGUgdGFibGUuIFRoZW4gUzEgd291bGQgZm9yZ2V0IHRoYXQg
aXQgd2FudGVkIFRvcCwgYW5kIHdvdWxkIHVzZSBTMidzIHR5cGUuIENsZWFybHksCisgICAgLy8g
dGhhdCdzIGJhZC4gV2UgYXZvaWQgc3VjaCBjb25mdXNpb24gYnkgZW5zdXJpbmcgdGhhdCBhIHRy
YW5zaXRpb24gYWx3YXlzIGFkZHMgYW4gZW50cnkuIEhlbmNlLAorICAgIC8vIGFic2VuY2UtbWVh
bnMtYm90dG9tIG9ubHkgY29tZXMgaW50byBwbGF5IGZvciBwcm9wZXJ0aWVzIGFkZGVkIGJlZm9y
ZSB0aGUgSW5mZXJyZWRUeXBlVGFibGUgd2FzCisgICAgLy8gY3JlYXRlZC4KKyAgICB0eXBlZGVm
IEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgV3JpdGVCYXJyaWVyPEluZmVycmVk
VHlwZT4sIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFVuaXF1ZWRTdHJpbmdJbXBsKj4+
IFRhYmxlVHlwZTsKKyAgICAKKyAgICBUYWJsZVR5cGUgbV90YWJsZTsKKworICAgIC8vIFdlIG9u
bHkgZ3JhYiB0aGlzIGxvY2sgd2hlbiB3ZSdyZSBkb2luZyBtb2RpZmljYXRpb25zIG9uIHRoZSBt
YWluIHRocmVhZCwgb3IgcmVhZHMgb24gdGhlIGNvbXBpbGVyCisgICAgLy8gdGhyZWFkLiBUaGUg
Y29tcGlsZXIgdGhyZWFkIGlzIG5vdCBhbGxvd2VkIHRvIGRvIG1vZGlmaWNhdGlvbnMuCisgICAg
Q29uY3VycmVudEpJVExvY2sgbV9sb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxODk3NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzEx
ODksOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0lu
ZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmli
dXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKQEAgLTEyMjgsNiArMTIzMCw4IEBAIGlubGluZSBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAg
c2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CisgICAgICAgIHN0cnVjdHVyZS0+d2ls
bFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNv
bnRleHQoKSA9PSBQdXRCeUlkKTsKKyAgICAgICAgCiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsK
ICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpIHsKQEAgLTEyNDQsMTIgKzEyNDgsMTYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEludGVybmFsKAogICAgIH0KIAogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVz
OwotICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRB
dHRyaWJ1dGVzKTsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJy
ZWRUeXBlKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYg
KChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNl
UHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkp
CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSh2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7CisKICAgICAgICAg
c2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHB1dERpcmVj
dCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAKQEAgLTEyNjksNiArMTI3Nyw3IEBAIGlubGluZSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOwogICAgIAogICAgIHN0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVy
cmVkV2F0Y2hwb2ludEZpcmUpOworICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFu
c2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRCeUlk
KTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChzdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE4OTc2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MCwx
MSArMzUwLDE1IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAg
ICBlbHNlCiAgICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKIAor
ICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdl
dCgpOworCiAgICAgZm9yIChzaXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJl
LT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3Bl
cnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOworICAg
ICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5Q
cmV2aW91cy5nZXQoKSkpCisgICAgICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVl
OwogICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5
VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNDY0
LDYgKzQ2OCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAg
ICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+
bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OworICAgIHRyYW5zaXRpb24tPm1faW5mZXJy
ZWRUeXBlVGFibGUuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5m
ZXJyZWRUeXBlVGFibGUuZ2V0KCkpOwogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCkBAIC00NzksNiArNDg0LDI0IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKIAogU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewor
ICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBzb21lIGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRp
cmVjdGx5IHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnkgcmF0aGVyIHRoYW4KKyAgICAvLyBjYWNo
aW5nIHRoZSByZW1vdmFsLiBXZSBjYW4gZml4IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBt
dXN0IHJlbWVtYmVyIHRvIGRvIHNvLCBpZiB3ZSBldmVyIHRyeQorICAgIC8vIHRvIG9wdGltaXpl
IHRoaXMgY2FzZS4KKyAgICAvLworICAgIC8vIC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkg
c3RlYWwgdGhlIHByb3BlcnR5IHRhYmxlLCBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJs
ZSBiZWNhdXNlIHRoZXkKKyAgICAvLyAgIGNhbiBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxv
b2tpbmcgYXQgcGFzdCB0cmFuc2l0aW9ucy4gVGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFi
bGUgb25seQorICAgIC8vICAgZ3JldyBhbmQgbmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92
YWxzLCB3ZSdkIGhhdmUgdG8gY2hhbmdlIHRoZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRp
b24KKyAgICAvLyAgIGNvZGUgdG8gaGFuZGxlIGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dp
YyB0byBnZXQgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0CisgICAg
Ly8gICBsYWNrcyBhIHByb3BlcnR5IHRhYmxlIGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2gg
dGhlIHNldCBvZiB0cmFuc2l0aW9ucyBzaW5jZSB0aGUgbGFzdAorICAgIC8vICAgc3RydWN0dXJl
IHRoYXQgaGFkIGEgcGlubmVkIHRhYmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBi
ZSBjaGFuZ2VkIHRvIGhhbmRsZSBjYWNoZWQKKyAgICAvLyAgIHJlbW92YWxzLgorICAgIC8vCisg
ICAgLy8gLSBJbmZlcnJlZFR5cGVUYWJsZSBhc3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIg
aGFwcGVuZWQuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIGlmIHdlIGNvdWxkCisgICAgLy8gICBy
ZW1vdmUgYSBwcm9wZXJ0eSBhbmQgdGhlbiByZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNl
bmNlIG1lYW5zIHRvcCIgb3B0aW1pemF0aW9uIHdvdWxkbid0CisgICAgLy8gICB3b3JrIGFueW1v
cmUsIHVubGVzcyByZW1vdmFsIGFsc28gZWl0aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChi
eSBkb2luZyBzb21ldGhpbmcgZXF1aXZhbGVudCB0bworICAgIC8vICAgaGFzQmVlbkRpY3Rpb25h
cnkpIG9yIGJ5IHN0cm9uZ2x5IG1hcmtpbmcgdGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0
aGF0IGl0IGlzIG5vdCBhYnNlbnQsIGJ1dAorICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBl
bnRyeS4KKyAgICAKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlv
bmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CkBAIC04NDEsNiArODY0LDQzIEBAIHZvaWQg
U3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVy
bmFsUHJvcGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVl
U2xvdygKKyAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkT3B0aW1pemUsCisgICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFBy
b3BlcnR5QWdlIGFnZSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOworICAgIEFTU0VS
VCghaGFkQmVlbkRpY3Rpb25hcnkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5
cGUgdGFibGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0Mg
YWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5CisgICAgLy8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUg
cHJvcGVydHkgbWFwLgorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRU
eXBlVGFibGUuZ2V0KCk7CisgICAgaWYgKCF0YWJsZSkgeworICAgICAgICB0YWJsZSA9IEluZmVy
cmVkVHlwZVRhYmxlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVCYXJyaWVy
KCk7CisgICAgICAgIG1faW5mZXJyZWRUeXBlVGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRh
YmxlLgorICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7CisgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKworICAgIC8vIFdlIG11
c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0
eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMgcHJlc2VudAorICAgIC8vIGFscmVhZHksIHNvIHdl
IG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxlIG5vdy4KKyAgICBBU1NFUlQocHJvcGVydHlUYWJs
ZSk7CisKKyAgICAvLyAuLi4gYW5kIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQuCisgICAg
UHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1l
LnVpZCgpKTsKKyAgICBBU1NFUlQoZW50cnkpOworCisgICAgaWYgKHNob3VsZE9wdGltaXplKQor
ICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2UpOworICAgIGVsc2UgeworICAgICAgICB0YWJsZS0+
bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lLCBhZ2UpOworICAgICAgICBlbnRyeS0+aGFzSW5mZXJy
ZWRUeXBlID0gZmFsc2U7CisgICAgfQorfQorCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwog
CiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzID0g
MDsKQEAgLTEwNTgsNiArMTExOCw4IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvcGVydHlU
YWJsZVVuc2FmZSk7CiAgICAgfSBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVV
bnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigp
OworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faW5mZXJyZWRUeXBlVGFibGUp
OwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRv
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxODk3NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRK
SVRMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRU
eXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC04MSwxMSArODIsMTMgQEAgc3RydWN0IFByb3BlcnR5
TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVk
VHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBvciBub3QgYSBwcm9wZXJ0eSBoYXMgYW4gaW5m
ZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSwgYW5kIGlzIHVzZWQgZm9yIGEg
ZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoKS4KIAogICAgIFByb3Bl
cnR5TWFwRW50cnkoKQogICAgICAgICA6IGtleShudWxscHRyKQogICAgICAgICAsIG9mZnNldChp
bnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoMCkKKyAgICAgICAgLCBoYXNJbmZl
cnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTkzLDYgKzk2LDcgQEAgc3Ry
dWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zm
c2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgICAgICwg
aGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmF0dHJp
YnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpAQCAtMzIzLDYgKzMyNyw3IEBAIHB1YmxpYzoK
IAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVy
dHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7Cisg
ICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmli
dXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsKIAogICAgIC8vIFRoaXMgaXMgYSBzb21ld2hh
dCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwgY2FsbCB5b3VyIGZ1bmN0b3Igd2hpbGUgcG9z
c2libHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1cmUncyBsb2NrLiBUaGVyZSBpcyBubyBn
dWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBoZWxkIG9yIG5vdCBpbiBhbnkgcGFydGljdWxh
cgpAQCAtNDgxLDYgKzQ4Niw0MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0
YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeSh2bSk7CiAgICAgfQogCisg
ICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
IW1faW5mZXJyZWRUeXBlVGFibGU7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJl
ZFR5cGVGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIGlmIChJbmZl
cnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRhYmxlLT5nZXQodWlkKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZURlc2NyaXB0
b3JGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIGlmIChJbmZlcnJl
ZFR5cGUqIHJlc3VsdCA9IGluZmVycmVkVHlwZUZvcih1aWQpKQorICAgICAgICAgICAgcmV0dXJu
IHJlc3V0LT5kZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsK
KyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5
IGlzIHN0aWxsIHZhbGlkLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZv
clRyYW5zaXRpb24oCisgICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmICho
YXNCZWVuRGljdGlvbmFyeSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBl
VGFibGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3co
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJs
ZTo6TmV3UHJvcGVydHkpOworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3Jl
VmFsdWVGb3JSZXBsYWNlKAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBp
ZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2ls
bFNsb3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwg
SW5mZXJyZWRUeXBlVGFibGU6Ok9sZFByb3BlcnR5KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRy
PFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8v
IERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMg
b25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02MzIsNiArNjcyLDkgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0m
KTsKIAorICAgIHZvaWQgd2lsbFN0b3JlVmFsdWVTbG93KAorICAgICAgICBWTSYsIFByb3BlcnR5
T2Zmc2V0LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wsIEluZmVycmVkVHlwZVRhYmxlOjpT
dG9yZWRQcm9wZXJ0eUFnZSk7CisKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlv
bkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3Ro
Rm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKQEAgLTY1NSw2ICs2OTgsOCBAQCBwcml2YXRlOgog
ICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4gRHVyaW5n
IEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCiAgICAgV3JpdGVCYXJy
aWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIAorICAgIFdyaXRlQmFy
cmllcjxJbmZlcnJlZFR5cGVUYWJsZT4gbV9pbmZlcnJlZFR5cGVUYWJsZTsKKwogICAgIG11dGFi
bGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAgICAg
Q09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0X2ZpdHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTg5NzY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwx
OSArNzUsMTkgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpzdG9yZWRQcm90bwogCiBB
TFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAg
IFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUp
Ci0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJvcGVydHlNYXBFbnRyeSog
ZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICByZXR1
cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxpZE9mZnNldDsKKyAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKIH0KICAgICAKIEFM
V0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKIHsKKyAgICBib29sIGhh
c0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIGhhc0luZmVycmVkVHlwZSk7Cit9CisKK0FMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKQorewogICAgIEFTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IGluZm8oKSk7CiAKQEAgLTEwMSw2ICsxMDEsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAg
YXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOworICAgIGhhc0luZmVycmVkVHlwZSA9IGVu
dHJ5LT5oYXNJbmZlcnJlZFR5cGU7CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261216</attachid>
            <date>2015-09-15 11:04:18 -0700</date>
            <delta_ts>2015-09-15 12:12:44 -0700</delta_ts>
            <desc>LLInt put_by_id type checking is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>157696</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDUsNiArNzQ3LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5
MjMsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3Myw2ICsyNTgxLDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0
NjYzLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00Njg2LDYgKzQ2OTgsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3
NTIsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDQzLDkgKzUwNTks
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE5Nyw2ICs1MjEzLDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzQ0LDYgKzUzNjEsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTM0LDYgKzU5NTIsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDQ3LDYg
KzYwNjYsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMyLDYgKzYzNTIsNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5Nyw2ICs2
NTE4LDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQzOSw2ICs3NDYxLDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4NTMsNiArNzg3Niw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0IEBAIG5hbWVzcGFjZSBX
VEYgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0
cmluZ091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQ
dXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChjb21tYSwgIklzRGlyZWN0
Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7CiAKLSAgICBDU3RyaW5n
IHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJp
bnQoc3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6
a2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOworICAgIGlm
IChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMg
KzI2LDcwIEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5lIFB1dEJ5SWRGbGFnc19o
CiAKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGludHB0cl90IHsKICAgICBQ
dXRCeUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQorCisgICAgLy8gVGhpcyBm
bGFnIGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0LiBUaGF0IG1lYW5zIHRo
YXQgd2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBjaGVja2luZyBpZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEs
CisgICAgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCisKKyAgICAvLyBOT1RFOiBU
aGUgdmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20uCisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJy
ZWQgdHlwZSBpbnZvbHZlcyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFu
ZCB0aGVuCisgICAgLy8gdXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRo
ZSBzZWNvbmRhcnkgbWFzazoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlU
eXBlTWFzaykgeworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAg
IC8vICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAg
Ly8gICAgIC4uLgorICAgIC8vICAgICB9CisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAvLyBjYXNlIFB1dEJ5
SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIC8vICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKKyAgICAvLyAg
ICAgYnJlYWs7CisgICAgLy8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCisg
ICAgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRo
ZSBzZWNvbmRhcnkgdHlwZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0
dXJlIElELgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
ID0gMHg0LCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorCisgICAgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRv
bSA9IDB4MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCisgICAgUHV0
QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJ
bnQzMiA9IDB4MTgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAorICAg
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdCA9IDB4MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
ID0gMHgzOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKIH07CiAKK2lubGlu
ZSBQdXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJlSUQgaWQpCit7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkg
PDwgMzsKKyNlbHNlCisgICAgUHV0QnlJZEZsYWdzIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRC
eUlkRmxhZ3M+KGlkKTsKKyAgICBBU1NFUlQoIShyZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5
cGVNYXNrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQorCitpbmxpbmUgU3RydWN0
dXJlSUQgZGVjb2RlU3RydWN0dXJlSUQoUHV0QnlJZEZsYWdzIGZsYWdzV29yZCkKK3sKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3Mg
Pj4gMyk7CisjZWxzZQorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RydWN0dXJlSUQ+KGZsYWdz
ICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbQogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKLSAgICAgICAgcmV0
dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1
cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAgfQogCiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3Ry
dWN0dXJlSUQpOwpAQCAtMTAzLDcgKzEwMyw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb20KICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3Jt
YXRpb24pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICBy
ZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwgbmV3U3RydWN0dXJlLT5pbmZlcnJlZFR5
cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTYyLDcg
KzE2Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAg
c3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpLCBvZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkBAIC0xOTMsNyArMTk0
LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAg
ICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUs
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5p
bmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjA2LDcgKzIwOCw4IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBpZiAo
IWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHkoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7CiAgICAgICAgICAgICAg
ICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAotICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1
aWQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKQEAgLTMyOSw4ICszMzIsMTAgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9u
ZSBhbmQgdGFrZSBzbG93IHBhdGguCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3Ry
dWN0dXJlLCBvZmZzZXQpKSkKKworICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9
CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZz
ZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQpAQCAtMzU2LDEzICszNjEsMTYgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkg
b3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0
aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5
KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOwogICAg
ICAgICBpZiAoIXRyYW5zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAg
ICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCi0gICAg
ICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24s
IGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJh
bnNpdGlvbigKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlv
blNldCwgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPmluZmVycmVkVHlwZURl
c2NyaXB0b3JGb3IodWlkKSkpOwogICAgICAgICBpZiAoIWRpZEFwcGVuZCkKICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBQdXRCeUlkVmFyaWFu
dCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5t
X25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0
OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAgbV9yZXF1aXJlZFR5cGUgPSBv
dGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAg
ICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+
KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNlCkBAIC01MiwxOCArNTMsMjEgQEAg
UHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJldHVybiAqdGhp
czsKIH0KIAotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK1B1dEJ5SWRWYXJp
YW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICBy
ZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3JlcXVp
cmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQdXRCeUlk
VmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAgICAgcmVz
dWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03MSw2ICs3NSw3IEBAIFB1dEJ5SWRWYXJpYW50
IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1cmUgPSBu
ZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0Owog
ICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUg
PSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODUsNiArOTAsNyBA
QCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAogICAgIHJlc3VsdC5tX2Nv
bmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7
CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6Om1vdmUoY2FsbExpbmtTdGF0dXMp
OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzNCw5ICsxNDAsMTIgQEAgYm9vbCBQdXRCeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogewogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29m
ZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVxdWlyZWRUeXBlICE9
IG90aGVyLm1fcmVxdWlyZWRUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
c3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIFJlcGxhY2U6CisgICAgY2FzZSBSZXBsYWNlOiB7
CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2UgUmVwbGFjZTog
ewogICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSk7CkBAIC0xNTgs
NiArMTY3LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisgICAg
fQogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgICAgIHN3aXRjaCAob3RoZXIu
bV9raW5kKSB7CkBAIC0yMTAsMTQgKzIyMCwxNSBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1w
SW5Db250ZXh0KFByaW50CiAgICAgICAgIAogICAgIGNhc2UgUmVwbGFjZToKICAgICAgICAgb3V0
LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgICI8
UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0g
Iiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLAorICAgICAgICAgICAgIj4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAgICAgIG91
dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgaW5Db250ZXh0KG9sZFN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRl
eHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAgICAgICAgICAgIGluQ29udGV4
dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4i
KTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBv
ZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCksICI+Iik7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJsaWM6CiAgICAgUHV0QnlJZFZhcmlh
bnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlkVmFyaWFudCYgb3BlcmF0b3I9
KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVw
bGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIFB1
dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyBQdXRC
eUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0
cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVy
KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtOTksNiArOTksMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CiAgICAgfQogCisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIHJlcXVpcmVkVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9y
ZXF1aXJlZFR5cGU7CisgICAgfQorCiAgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7
CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKICAgICBib29sIG1ha2VzQ2Fs
bHMoKSBjb25zdDsKQEAgLTEzMCw2ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZSog
bV9uZXdTdHJ1Y3R1cmU7CiAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRp
b25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIG1fcmVxdWlyZWRUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxODk4MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2lu
Y2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGFyc2VyTW9kZXMuaCIKLSNpbmNsdWRlICJQ
dXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIKICNpbmNsdWRlICJTcGVjaWFsUG9p
bnRlci5oIgogI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgiCkBAIC05OCwx
MiArOTcsMTAgQEAgc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24gewogICAgIFVubGlua2VkSW5z
dHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9w
Y29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQogICAgIFVubGlua2VkSW5zdHJ1
Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQotICAgIFVubGlua2Vk
SW5zdHJ1Y3Rpb24oUHV0QnlJZEZsYWdzIGZsYWdzKSB7IHUucHV0QnlJZEZsYWdzID0gZmxhZ3M7
IH0KICAgICB1bmlvbiB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZTsKICAgICAgICAgaW50MzJf
dCBvcGVyYW5kOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAgICAgICAgUHV0QnlJZEZsYWdz
IHB1dEJ5SWRGbGFnczsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
Niw3ICszMzYsMzkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdG91Y2goU3RyaW5nRmlyZURl
dGFpbChyZWFzb24pKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBOb3RlIHRoYXQgZm9yIGFueSB3
YXRjaHBvaW50IHRoYXQgaXMgdmlzaWJsZSBmcm9tIHRoZSBERkcsIGl0IHdvdWxkIGJlIGluY29y
cmVjdCB0byB3cml0ZSBjb2RlIGxpa2U6CisgICAgLy8KKyAgICAvLyBpZiAody5pc0JlaW5nV2F0
Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAgIC8vCisgICAgLy8gQ29uY3VycmVu
dGx5IHRvIHRoaXMsIHRoZSBERkcgY291bGQgZG86CisgICAgLy8KKyAgICAvLyBpZiAody5pc1N0
aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcGVyZm9ybSBvcHRpbWl6YXRpb25zOworICAgIC8vIGlm
ICghdy5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcmV0cnkgY29tcGlsYXRpb247CisgICAg
Ly8KKyAgICAvLyBOb3RlIHRoYXQgdGhlIERGRyBhbGdvcml0aG0gaXMgd2lkZXNwcmVhZCwgYW5k
IHNvdW5kLCBiZWNhdXNlIGZpcmVBbGwoKSBhbmQgaW52YWxpZGF0ZSgpIHdpbGwgbGVhdmUKKyAg
ICAvLyB0aGUgd2F0Y2hwb2ludCBpbiBhICFpc1N0aWxsVmFsaWQoKSBzdGF0ZS4gSGVuY2UsIGlm
IGZpcmVBbGwoKSBvciBpbnZhbGlkYXRlKCkgaW50ZXJsZWF2ZWQgYmV0d2VlbgorICAgIC8vIHRo
ZSBmaXJzdCBpc1N0aWxsVmFsaWQoKSBjaGVjayBhbmQgdGhlIHNlY29uZCBvbmUsIHRoZW4gaXQg
d291bGQgc2ltcGx5IGNhdXNlIHRoZSBERkcgdG8gcmV0cnkKKyAgICAvLyBjb21waWxhdGlvbiBs
YXRlci4KKyAgICAvLworICAgIC8vIEJ1dCwgaWYgeW91IGNoYW5nZSBzb21lIHBpZWNlIG9mIHN0
YXRlIHRoYXQgdGhlIERGRyBtaWdodCBvcHRpbWl6ZSBmb3IsIGJ1dCBpbnZhbGlkYXRlIHRoZQor
ICAgIC8vIHdhdGNocG9pbnQgYnkgZG9pbmc6CisgICAgLy8KKyAgICAvLyBpZiAody5pc0JlaW5n
V2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAgIC8vCisgICAgLy8gdGhlbiB0
aGUgREZHIHdvdWxkIG5ldmVyIGtub3cgdGhhdCB5b3UgaW52YWxpZGF0ZWQgc3RhdGUgYmV0d2Vl
biB0aGUgdHdvIGNoZWNrcy4KKyAgICAvLworICAgIC8vIFRoZXJlIGFyZSB0d28gd2F5cyB0byB3
b3JrIGFyb3VuZCB0aGlzOgorICAgIC8vCisgICAgLy8gLSBDYWxsIGZpcmVBbGwoKSB3aXRob3V0
IGEgaXNCZWluZ1dhdGNoZWQoKSBjaGVjay4gVGhlbiwgdGhlIERGRyB3aWxsIGtub3cgdGhhdCB0
aGUgd2F0Y2hwb2ludCBoYXMKKyAgICAvLyAgIGJlZW4gaW52YWxpZGF0ZWQgd2hlbiBpdCBkb2Vz
IGl0cyBzZWNvbmQgY2hlY2suCisgICAgLy8KKyAgICAvLyAtIERvIG5vdCBleHBvc2UgdGhlIHdh
dGNocG9pbnQgc2V0IHRvIHRoZSBERkcgZGlyZWN0bHksIGFuZCBoYXZlIHlvdXIgb3duIHdheSBv
ZiB2YWxpZGF0aW5nIHdoZXRoZXIKKyAgICAvLyAgIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoZSBE
RkcgdGhyZWFkIHVzZWQgYXJlIHN0aWxsIHZhbGlkIHdoZW4gdGhlIERGRyBjb2RlIGlzIGluc3Rh
bGxlZC4KICAgICBib29sIGlzQmVpbmdXYXRjaGVkKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChpc0ZhdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTEyLDcgKzIxMTIsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFB1dEJ5CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBvZmZz
ZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVyZSBjaGFpbgotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChQdXRCeUlkTm9uZSk7IC8vIGlzIG5vdCBkaXJlY3QKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PihQdXRCeUlkTm9uZSkpOyAvLyBpcyBub3Qg
ZGlyZWN0CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0yMTM0LDcgKzIxMzQsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIG5l
dyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVyZSBj
aGFpbiAodW51c2VkIGlmIGRpcmVjdCkKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoKHB1dFR5
cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBwcm9wZXJ0eSAhPSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJZElzRGlyZWN0IDogUHV0QnlJZE5v
bmUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KChwdXRUeXBl
ID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJvcGVydHkgIT0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJc0RpcmVjdCA6IFB1dEJ5SWROb25l
KSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTg5ODEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0
LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpCiAgICAgewotICAgICAg
ICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCk7CisgICAgICAgIHJldHVybiBmaWx0
ZXIoZm9yTm9kZShub2RlKSwgc2V0LCBhZG1pdHRlZFR5cGVzKTsKICAgICB9CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSw3ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSksIHZhbHVlKTsKICAgICB9CiAgICAg
Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVj
dHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05v
bmUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBYnN0cmFjdFZhbHVl
JiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1
ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUo
QWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyOSwxMCArMTgyOSwxMCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUu
bV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBD
ZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSkpIHsKLSAgICAgICAgICAgIEdl
dEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAg
ICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwor
ICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQpOwogICAgICAgICAgICAgaWYgKHN0YXR1
cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRoZSBy
ZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEgY29uc3RhbnQsIG9yIG1heWJlCiAg
ICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwpAQCAtMTg0MSwyMiArMTg0
MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2ZSB1cyBhIHZhcmlhbnQgdGhhdCBp
bnZvbHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QKICAgICAgICAgICAgICAgICAgICAg
Ly8gaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KICAgICAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3Rh
bnRSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
bWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQu
c2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgKm1fZ3JhcGguZnJlZXplKGNv
bnN0YW50UmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jl
c3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVzW2ldLm9mZnNldCgpLCBtX2dyYXBo
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxIHx8IGlzRlRMKG1fZ3JhcGgubV9w
bGFuLm1vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3VsdDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE4ODAsNyArMTg3MCw2IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsg
Ly8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAKICAg
ICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAg
CkBAIC0xODg4LDEyICsxODc3LDIzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdlJ3JlIHRlc3Rpbmcu
IEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hlY2sKICAgICAgICAg
Ly8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KICAgICAgICAgCi0gICAgICAg
IGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgaWYgKHZh
bHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRU
eXBlcyA9IFNwZWNOb25lOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICBhZG1pdHRlZFR5cGVzID0g
U3BlY05vbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlcjoK
KyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjT3RoZXI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2Rl
LCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAg
ICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIGZpbHRlcih2YWx1ZSwg
c2V0LCBhZG1pdHRlZFR5cGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTIwODQsMTMgKzIwODQsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSksIGRhdGEub2Zmc2V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAg
ICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSku
bWFrZUhlYXBUb3AoKTsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdOworCisgICAgICAgIC8vIEZJWE1F
OiBUaGUgcGFydCBvZiB0aGlzIHRoYXQgaGFuZGxlcyBpbmZlcnJlZCBwcm9wZXJ0eSB0eXBlcyBy
ZWxpZXMgb24gQUkga25vd2luZyB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIHJpZ2h0IG5vdy4g
VGhhdCdzIHByb2JhYmx5IG5vdCBvcHRpbWFsLiBJbiBzb21lIGNhc2VzLCB3ZSBtYXkgcGVyZm9y
bSBhbiBvcHRpbWl6YXRpb24gKHVzdWFsbHkKKyAgICAgICAgLy8gYnkgc29tZXRoaW5nIG90aGVy
IHRoYW4gQUksIG1heWJlIGJ5IENTRSBmb3IgZXhhbXBsZSkgdGhhdCBvYnNjdXJlcyBBSSdzIHZp
ZXcgb2YgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyBhdCB0aGUgcG9pbnQgd2hlcmUgR2V0QnlP
ZmZzZXQgcnVucy4gQ3VycmVudGx5LCB3aGVuIHRoYXQgaGFwcGVucywgd2UnbGwgaGF2ZSB0byBy
ZWx5IGVudGlyZWx5CisgICAgICAgIC8vIG9uIHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIg
d2FzIGFibGUgdG8gcHJvdmUuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX2dyYXBo
LmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
KTsKKworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHR5cGUgdGhhdCBCeXRlQ29k
ZVBhcnNlciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHR5
cGVGcm9tUGFyc2luZzsKKyAgICAgICAgdHlwZUZyb21QYXJzaW5nLnNldChtX2dyYXBoLCBkYXRh
LT5pbmZlcnJlZFR5cGUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAg
ICB2YWx1ZS5maWx0ZXIodHlwZUZyb21QYXJzaW5nKTsKKworICAgICAgICAvLyBJZiB3ZSBkZWNp
ZGUgdGhhdCB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbnkgdmFsdWUgdGhhdCB0aGlzIGNhbiByZXR1
cm4sIHRoZW4gaXQncyBwcm9iYWJseQorICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb21waWxhdGlv
biB3YXMgYWxyZWFkeSBpbnZhbGlkYXRlZC4KKyAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkK
KyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisKKyAgICAgICAgZm9yTm9k
ZShub2RlKSA9IHZhbHVlOworICAgICAgICBpZiAodmFsdWUubV92YWx1ZSkKKyAgICAgICAgICAg
IG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkBAIC0yMTIwLDYgKzIxMzYsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21w
aWxlIHRpbWVzLCBidXQgdGhpcyBub2RlIGlzIEZUTC1vbmx5LgogICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAKKyAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLmlkZW50aWZpZXJOdW1iZXJdOworCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CkBAIC0yMTI5LDE4ICsyMTQ3LDI5IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChzZXQu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNl
dC5tZXJnZShzZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRo
b2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIHN3aXRjaCAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiB7CisgICAgICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0
KAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgICAgICAgICAqZ2V0
Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhp
c1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAgICAg
IHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAg
ICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKLSAgICAgICAgICAgICAgICBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlz
UmVzdWx0KTsKKworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZmV0TWV0aG9kOjpMb2FkOiB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCwg
dWlkLCBnZXRDYXNlLm1ldGhvZCgpLm9mZnNldCgpLCBtX2dyYXBoLnN0cnVjdHVyZUNsb2JiZXJT
dGF0ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJl
KG1fZ3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCkBAIC0yMTYzLDYgKzIxOTIsOCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZh
bHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSBvcmlnaW5hbFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUgcmVzdWx0aW5nVmFsdWU7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykg
ewogICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwpAQCAtMjE3MCw2ICsyMjAxLDExIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIHRoaXNT
ZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNW
YWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisgICAgICAgICAgICB0aGlzVmFsdWUuZmlsdGVyKG1fZ3Jh
cGgsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOworICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUu
bWVyZ2UodGhpc3ZhbHVlKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAg
aWYgKHRoaXNTZXQub25seVN0cnVjdHVyZSgpICE9IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMjE4NSw2ICsyMjIx
LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBv
YnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlm
IChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0
KSA9PSBDb250cmFkaWN0aW9uKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNl
KTsKKyAgICAgICAgZm9yKG5vZGUobm9kZS0+Y2hpbGQyKCkpID0gcmVzdWx0aW5nVmFsdWU7Cisg
ICAgICAgIGlmICghIW9yaWdpbmFsVmFsdWUgJiYgIXJlc3VsdGluZ1ZhbHVlKQorICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTIyNjQsMTMgKzIzMDMsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZERp
cmVjdDogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVl
Lm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0
dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgIHZhbHVlLm1f
c3RydWN0dXJlLnNldCgpLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0g
UHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHN0YXR1cy5p
c1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAg
ICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwpAQCAtMjYxNSw5ICsyNjU0
LDkgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcigKLSAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVz
KQogewotICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0KSA9PSBGaWx0cmF0aW9uT0sp
CisgICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQsIGFkbWl0dGVkVHlwZXMpID09IEZp
bHRyYXRpb25PSykKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOwogICAgIHJldHVybiBDb250cmFkaWN0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDU2IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6
c2V0VHlwZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKK3ZvaWQg
QWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBjbGVhcigpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIHNldFR5
cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok90aGVyOgorICAgICAgICBzZXRUeXBlKFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
IHNldFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHNldChncmFwaCwgZ3JhcGgubV92bS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSk7CisgICAgICAgIG1lcmdlKFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBzZXRUeXBlKGdyYXBoLCBT
cGVjT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RPck90aGVyOgorICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0IHwgU3BlY090aGVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAg
IG1ha2VIZWFwVG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldCgKKyAgICBH
cmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
U3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBzZXQoZ3JhcGgsIGRl
c2NyaXB0b3IpOworICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJl
ZCkKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKK30KKwogdm9pZCBBYnN0cmFjdFZhbHVl
OjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmIGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVz
ZW50YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKHJlcHJlc2VudGF0aW9uID09IE5vZGVS
ZXN1bHREb3VibGUpIHsKQEAgLTE4OSw4ICsyMzksMjIgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjpt
ZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBvbGRNZSAhPSAqdGhpczsKIH0KIAotRmls
dHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIG90aGVyKQorYm9vbCBBYnN0cmFjdFZhbHVlOjppc1R5cGUoR3JhcGgmIGdy
YXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSkgY29uc3QK
IHsKKyAgICBBYnN0cmFjdFZhbHVlIHR5cGVWYWx1ZTsKKyAgICB0eXBlVmFsdWUuc2V0KGdyYXBo
LCBpbmZlcnJlZFR5cGUpOworCisgICAgQWJzdHJhY3RWYWx1ZSBtZXJnZWRWYWx1ZSA9ICp0aGlz
OworICAgIG1lcmdlZFZhbHVlLm1lcmdlKHR5cGVWYWx1ZSk7CisKKyAgICByZXR1cm4gbWVyZ2Vk
VmFsdWUgPT0gdHlwZVZhbHVlOworfQorCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6
OmZpbHRlcigKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIsIFNw
ZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCit7CisgICAgQVNTRVJUKCEoYWRtaXR0ZWRUeXBl
cyAmIFNwZWNDZWxsKSk7CisgICAgCiAgICAgaWYgKGlzQ2xlYXIoKSkKICAgICAgICAgcmV0dXJu
IEZpbHRyYXRpb25PSzsKICAgICAKQEAgLTE5OCw3ICsyNjIsNyBAQCBGaWx0cmF0aW9uUmVzdWx0
IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgLy8gaGF2aW5nIHN0cnVjdHVyZXMsIGFycmF5
IG1vZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjMKICAgICAKLSAgICBtX3R5cGUgJj0gb3RoZXIuc3Bl
Y3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOworICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlv
bkZyb21TdHJ1Y3R1cmVzKCkgfCBhZG1pdHRlZFR5cGVzOwogICAgIG1fYXJyYXlNb2RlcyAmPSBv
dGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKICAgICBtX3N0cnVjdHVyZS5maWx0ZXIo
b3RoZXIpOwogICAgIApAQCAtMzE1LDYgKzM3OSwxMyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3Ry
YWN0VmFsdWU6OmZpbHRlcihjCiAgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CiB9CiAKK0ZpbHRy
YXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEdyYXBoJiBncmFwaCwgY29uc3QgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEFic3RyYWN0VmFsdWUg
ZmlsdGVyVmFsdWU7CisgICAgZmlsdGVyVmFsdWUuc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAg
ICByZXR1cm4gZmlsdGVyKGZpbHRlclZhbHVlKTsKK30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpm
aWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8gV2UgY291bGQgZ28gZnVydGhlciwgYW5kIGVu
c3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlz
aW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUZs
YWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUg
IkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgog
I2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVk
ZSAiRHVtcENvbnRleHQuaCIKQEAgLTIxNCw3ICsyMTUsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFs
dWUgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImKTsKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvciYsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CisKICAgICB2b2lkIGZp
eFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwg
Tm9kZSogPSBudWxscHRyKTsKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFw
aCYsIE5vZGUqKTsKICAgICAKQEAgLTI4MCwxNyArMjg0LDI3IEBAIHN0cnVjdCBBYnN0cmFjdFZh
bHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiAhKG1fdHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAg
ICAgfQorCisgICAgYm9vbCBpc1R5cGUoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImKSBjb25zdDsKKworICAgIC8vIEZpbHRlcnMgdGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZl
biBzdHJ1Y3R1cmUgc2V0LiBJZiB0aGUgYWRtaXR0ZWRUeXBlcyBhcmd1bWVudCBpcyBub3QgcGFz
c2VkLCB0aGlzCisgICAgLy8gaW1wbGljaXRseSBmaWx0ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVk
IGJ5IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3aGljaCBhcmUgdXN1YWxseSBhIHN1YnNldCBvZgorICAg
IC8vIFNwZWNDZWxsLiBIZW5jZSwgYWZ0ZXIgdGhpcyBjYWxsLCB0aGUgdmFsdWUgd2lsbCBubyBs
b25nZXIgaGF2ZSBhbnkgbm9uLWNlbGwgbWVtYmVycy4gQnV0LCB5b3UgY2FuCisgICAgLy8gdXNl
IGFkbWl0dGVkVHlwZXMgdG8gcHJlc2VydmUgc29tZSBub24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0
IGl0J3Mgd3JvbmcgZm9yIGFkbWl0dGVkVHlwZXMgdG8gb3ZlcmxhcAorICAgIC8vIHdpdGggU3Bl
Y0NlbGwuCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1
cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIAot
ICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7
CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMpOwogICAg
IEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVuVmFsdWUmIHZhbHVlKTsKICAgICBGaWx0
cmF0aW9uUmVzdWx0IGZpbHRlcihjb25zdCBBYnN0cmFjdFZhbHVlJik7CisKKyAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYp
OwogICAgIAogICAgIEZpbHRyYXRpb25SZXN1bHQgY2hhbmdlU3RydWN0dXJlKEdyYXBoJiwgY29u
c3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqKSBj
b25zdDsKLSAgICAKKwogICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDkgKzIwNiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFy
cmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJh
eVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxG
dW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwotICAgIE5vZGUqIGhh
bmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5
T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3Vs
YXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9m
ZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9w
ZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlUHV0
QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGUqIHZhbHVlKTsKKyAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogCiAgICAgLy8gQ3JlYXRlIGEgcHJl
c2VuY2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYmFzZWQgb24gc29tZSBrbm93biBvZmZzZXQg
YW5kIHN0cnVjdHVyZSBzZXQuIERvZXMgbm90CiAgICAgLy8gY2hlY2sgdGhlIHZhbGlkaXR5IG9m
IHRoZSBjb25kaXRpb24sIGJ1dCBpdCBtYXkgcmV0dXJuIGEgbnVsbCBvbmUgaWYgaXQgZW5jb3Vu
dGVycyBhIGNvbnRyYWRpY3Rpb24uCkBAIC0yMzA3LDcgKzIzMDYsOSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRC
eU9mZnNldCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsIE5vZGVUeXBlIG9wKQogewog
ICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0
KSkKQEAgLTIzMTgsMTMgKzIzMTksMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAgICBkYXRh
LT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICBkYXRhLT5pbmZlcnJl
ZFR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgCiAgICAgTm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRU
b0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9y
YWdlLCBiYXNlKTsKIAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAotTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
ZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGluZmVycmVkVHlwZSwKKyAgICBOb2RlKiB2YWx1ZSkKIHsKICAgICBOb2RlKiBwcm9wZXJ0
eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzM1LDYgKzIz
MzksNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7
CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIg
PSBpZGVudGlmaWVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAg
ICAKICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0
YSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgIApAQCAtMjQ0OSw3ICsyNDU0
LDggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgIHJldHVybiBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3RhbnQoKSkpOwogICAgIGNhc2UgR2V0
QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CiAgICAgICAgIE5vZGUqIGJhc2VO
b2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7
Ci0gICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwg
aWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBvcCk7CisgICAgICAgIHJldHVybiBo
YW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVu
dGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIEluZmVycmVkVHlwZTo6VG9wLCBvcCk7CiAg
ICAgfQogICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CiAgICAgICAgIC8vIFdpbGwg
bmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgpAQCAtMjU1NSwxMyArMjU2MSwxMyBAQCBO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAKICAgICBib29sIG5lZWRTdHJ1Y3R1cmVD
aGVjayA9IHRydWU7CiAgICAgCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAKICAgICBpZiAoSlNPYmplY3Qq
IGtub3duQmFzZSA9IGJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7CiAg
ICAgICAgIC8vIFRyeSB0byBvcHRpbWl6ZSBhd2F5IHRoZSBzdHJ1Y3R1cmUgY2hlY2suIE5vdGUg
dGhhdCBpdCdzIG5vdCB3b3J0aCBkb2luZyBhbnl0aGluZyBhYm91dCB0aGlzCiAgICAgICAgIC8v
IGlmIHRoZSBiYXNlJ3Mgc3RydWN0dXJlIGlzIHdhdGNoZWQuCiAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZS0+Y29uc3RhbnQoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgIGlmICgh
c3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKSB7Ci0gICAgICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIGxvYWRpbmcg
ZnJvbSBhIHByb3RvdHlwZS4gV2UgZXhwZWN0IHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZQogICAg
ICAgICAgICAgICAgIC8vIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24gaWYgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZQpAQCAtMjYyNiw5ICsyNjMy
LDE2IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgaWYgKGNvbnN0
YW50KQogICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CiAg
ICAgICAgIH0KKworICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBl
OworICAgICAgICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKSB7CisgICAgICAgICAgICBmb3IgKFN0
cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkKKyAgICAgICAgICAg
ICAgICBpbmZlcnJlZFR5cGUubWVyZ2UobV9ncmFwaC5pbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShz
dHJ1Y3R1cmUsIHVpZCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluZmVycmVkVHlw
ZSA9IEluZmVycmVkVHlwZTo6VG9wOwogICAgICAgICAKICAgICAgICAgbG9hZGVkVmFsdWUgPSBo
YW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVu
dGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBsb2FkT3ApOworICAgICAgICAgICAgbG9h
ZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGlu
ZmVycmVkVHlwZSwgbG9hZE9wKTsKICAgICB9CiAKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CkBA
IC0yNjM5LDcgKzI2NTIsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFz
ZSwgCiAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6
OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgp
KTsKLSAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFu
dC5vZmZzZXQoKSwgdmFsdWUpOworICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBp
ZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LmluZmVycmVkVHlwZSgpLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNs
dWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luZmVycmVkVHlw
ZUNoZWNrLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhh
c2UuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC00NDgsNiArNDQ5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxs
VXNlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJh
c2VWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKIAog
ICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQ
dXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAg
ICAgICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBk
ZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KQEAgLTQ2Myw3ICs0
NjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICgh
c3RhdHVzLmlzU2ltcGxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5udW1WYXJpYW50cygpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRz
KCkgPiAxICYmICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKQEAgLTY2Niw2ICs2NjgsOCBA
QCBwcml2YXRlOgogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAg
ICAgICAKICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVl
LCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hl
Y2soCisgICAgICAgICAgICBtX2luc2VydGlvblNldCwgaW5kZXhJbkJsb2NrLCBvcmlnaW4sIG5v
ZGUtPmNoaWxkMygpLm5vZGUoKSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CiAKICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVk
Z2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorI2RlZmlu
ZSBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGRvY3VtZW50cyB0aGUgREZHJ3Mg
ZXhwZWN0YXRpb24gZm9yIGFuIEluZmVycmVkVHlwZTogc3BlY2lmaWNhbGx5LCB0aGF0IHdlIHdh
bnQgaXQgdG8gaGF2ZSBhIGxpdmUKKy8vIEluZmVycmVkVHlwZSBvYmplY3QgYW5kIHRoYXQgdGhp
cyBvYmplY3QgaGFzIHRoZSB0eXBlIHRoYXQgd2Ugb3JpZ2luYWxseSBzYXcuCisKK2NsYXNzIERl
c2lyZWRJbmZlcnJlZFR5cGUgeworcHVibGljOgorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoKQor
ICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBEZXNp
cmVkSW5mZXJyZWRUeXBlKEluZmVycmVkVHlwZSogb2JqZWN0LCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImIGV4cGVjdGVkKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAg
ICAgLCBtX2V4cGVjdGVkKGV4cGVjdGVkKQorICAgIHsKKyAgICB9CisKKyAgICBEZXNpcmVkSW5m
ZXJyZWRUeXBlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29i
amVjdChudWxscHRyKQorICAgICAgICAsIG1fZXhwZWN0ZWQoVG9wKQorICAgIHsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QgJiYg
bV9leHBlY3RlZDsgfQorCisgICAgSW5mZXJyZWRUeXBlKiBvYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX29iamVjdDsgfQorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBleHBlY3RlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWQ7IH0KKworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuV2F0Y2gobV9leHBlY3RlZCk7
CisgICAgfQorCisgICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkgY29uc3QKKyAg
ICB7CisgICAgICAgIG1fb2JqZWN0LT5hZGRXYXRjaHBvaW50KHdhdGNocG9pbnQpOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBvdGhlci5tX29iamVjdAor
ICAgICAgICAgICAgJiYgbV9leHBlY3RlZCA9PSBvdGhlci5tX2V4cGVjdGVkOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV9vYmplY3QgJiYgbV9leHBlY3RlZCA9PSBUb3A7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEluZmVy
cmVkVHlwZSo+OjpoYXNoKG1fb2JqZWN0KSArIG1fZXhwZWN0ZWQuaGFzaCgpICogNzsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fZXhw
ZWN0ZWQsIGNvbnRleHQpLCAiIGZvciAiLCBSYXdQb2ludGVyKG1fb2JqZWN0KSk7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBk
dW1wSW5Db250ZXh0KG91dCwgY29udGV4dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEluZmVy
cmVkVHlwZSogbV9vYmplY3Q7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fZXhwZWN0
ZWQ7Cit9OworCitzdHJ1Y3QgRGVzaXJlZEluZmVycmVkVHlwZUhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkgeyByZXR1cm4ga2V5
Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5
cGUmIGEsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7CisgICAgdHlw
ZWRlZiBKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZUhhc2ggSGFzaDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4gOiBTaW1wbGVDbGFzc0hhc2hU
cmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDYgKzY1LDExIEBAIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvcjoKICAgICB9CiB9CiAKK3ZvaWQgSW5mZXJyZWRUeXBlQWRhcHRvcjo6YWRkKENvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIENvbW1vbkRh
dGEmIGNvbW1vbikKK3sKKyAgICBrZXkuYWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJs
b2NrKSk7Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9
CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIApAQCAtOTMs
NiArOTgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdAogICAg
IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCit2b2lkIERlc2ly
ZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkK
K3sKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAo
IXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEwOCw2ICsxMTgsNyBAQCB2b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmZlcnJlZFZhbHVlcy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5mZXJyZWRUeXBlcy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTE2LDcgKzEyNyw4IEBAIGJvb2wgRGVz
aXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRz
LmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFs
aWQoKQogICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAm
JiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2luZmVy
cmVkVHlwZXMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKQEAgLTEyNyw2ICsxMzksNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29u
dGV4dChQCiAgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFsdWVzOiAiLCBpbkNvbnRleHQo
bV9pbmZlcnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIEJ1
ZmZlciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsK
ICAgICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250
ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnBy
aW50KCIgICAgSW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVHlwZXMsIGNv
bnRleHQpLCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1ZGUgIkRG
R0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oIgpAQCAtOTEsNiArOTIsMTggQEAgc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludEFkYXB0bwogICAgIH0KIH07CiAKK3N0cnVjdCBJbmZlcnJlZFR5cGVBZGFwdG9yIHsKKyAg
ICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYs
IENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNT
dGlsbFZhbGlkKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBEdW1wQ29udGV4dCog
Y29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0
KSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5
cGVuYW1lIEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBj
bGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBA
IC0xNTksNiArMTcyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQg
eW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigp
LCB3aGljaCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29t
ZSBvdGhlciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24n
dCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKCksIHdoaWNo
IGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMuCisgICAgdm9pZCBhZGRMYXppbHko
Y29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3Ry
dWN0dXJlKik7CiAgICAgCkBAIC0xODYsNiArMjAzLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKICAgICB9
CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9
CiAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNv
bnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtMTk2LDYgKzIxNyw3
IEBAIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVl
KiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rl
c2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNo
cG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2lu
dHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFk
YXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJyZWRUeXBlQWRhcHRvcj4gbV9pbmZlcnJl
ZFR5cGVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDkyLDYgKzEwOTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3du
Q2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBl
Q2hlY2soCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG1faW5kZXhJbkJsb2NrLCBu
b2RlLT5vcmlnaW4sIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAgICAgICAgICAgICBzcGVjdWxh
dGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4Nyw2ICs4ODcsNTAgQEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpT
T2JqZWN0KiBiYXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtl
X3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFw
aDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFz
c2VydElzUmVnaXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9
IG1faW5mZXJyZWRUeXBlcy5nZXQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtX2luZmVycmVkVHlw
ZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIEluZmVycmVkVHlw
ZSogdHlwZU9iamVjdCA9IGtleS5zdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGtleS51aWQo
KSk7CisgICAgaWYgKCF0eXBlT2JqZWN0KSB7CisgICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQo
a2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRv
cDsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURlc2NyaXB0b3Ig
PSB0eXBlT2JqZWN0LT5kZXNjcmlwdG9yKCk7CisgICAgaWYgKCF0eXBlRGVzY3JpcHRvci5pc1N0
aWxsVmFsaWQoKSkgeworICAgICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRU
eXBlOjpUb3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorICAg
IAorICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCB0eXBlRGVzY3JpcHRvcik7CisKKyAgICBt
X3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHR5cGVPYmplY3QpOworICAgIGlmICh0eXBl
RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZURl
c2NyaXB0b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5
IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJlZCBpbmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxl
IHN0cnVjdHVyZXMgbWF5CisgICAgLy8gcG9pbnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGlu
c3RhbmNlLgorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVk
VHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVzY3JpcHRvcikpOworCisgICAgcmV0dXJuIHR5cGVEZXNj
cmlwdG9yOworfQorCitib29sIEdyYXBoOjp3YXRjaERlc2lyZWRUeXBlKGNvbnN0IERlc2lyZWRJ
bmZlcnJlZFR5cGUmIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1N0aWxsVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShr
ZXkub2JqZWN0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGtleS5leHBlY3Rl
ZCgpLnN0cnVjdHVyZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwor
ICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKK30KKwogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVz
cz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsK
QEAgLTEwNjEsNyArMTEwNSw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVy
dHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1
ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJl
LmlzQ2xvYmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAg
ICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwg
d2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcg
dG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTEyMCwzNSBAQCBK
U1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdl
dENvbnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQp
OwogfQogCitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVz
dWx0OworICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVl
LnNldCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0
eSgKKyAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2Ji
ZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVy
dHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNG
aW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShiYXNlLm1f
c3RydWN0dXJlLnNldCgpLCB1aWQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1cm4gQWJzdHJh
Y3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENs
b3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAgICAgLy8gVGhp
cyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEds
b2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyMSBAQCBwdWJsaWM6CiAg
ICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9i
amVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21wdXRl
ZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRp
b24oKS4KICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZz
ZXQpOworCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxlIHRv
IHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KKyAgICBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlw
ZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3JQcm9w
ZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVjdHVy
ZSwgdWlkKSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJv
cGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKworICAgIC8vIFRoaXMgdXNlcyBlaXRo
ZXIgY29uc3RhbnQgcHJvcGVydHkgaW5mZXJlbmNlIG9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNl
IHRvIGRlcml2ZSBhIGdvb2QgYWJzdHJhY3QKKyAgICAvLyB2YWx1ZSBmb3Igc29tZSBwcm9wZXJ0
eSBhY2Nlc3NlZCB3aXRoIHRoZSBnaXZlbiBhYnN0cmFjdCB2YWx1ZSBiYXNlLgorICAgIEFic3Ry
YWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICBjb25zdCBBYnN0cmFj
dFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2
ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNz
Rm9yKElubGluZUNhbGxGcmFtZSopOwpAQCAtODU2LDYgKzg3MSw3IEBAIHB1YmxpYzoKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVl
X3B0cjxCeXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpw
YWlyPEpTT2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CisgICAgSGFzaE1h
cDxQcm9wZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5
cGVzOwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcg
bV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZl
cnJlZFR5cGVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKwordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRpb25T
ZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwg
Tm9kZSogYmFzZU5vZGUsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
Qm90dG9tOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNO
b25lLCBGb3JjZU9TUkV4aXQsIG9yaWdpbik7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShu
b2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKEJvb2xlYW5Vc2UsIGJhc2VO
b2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoK
KyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hl
Y2ssIG9yaWdpbiwgRWRnZShPdGhlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKEludDMyVXNl
LCBiYXNlTm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
TnVtYmVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNO
b25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKE51bWJlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRn
ZShTdHJpbmdVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJl
LCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3Ry
dWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIEVkZ2UoQ2VsbFVzZSwg
YmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9i
amVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAg
ICAgICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlw
ZS5zdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShDZWxsT3JPdGhlclVzZSwgYmFzZU5v
ZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoK
KyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hl
Y2ssIG9yaWdpbiwgRWRnZShPYmplY3RVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdl
KE9iamVjdE9yT3RoZXJVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWR0eXBlOjpUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdf
Q1JBU0goaW5zZXJ0aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUi
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBl
Q2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVy
cmVkVHlwZUNoZWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luZmVycmVkVHlwZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZH
SW5mZXJyZWRUeXBlQ2hlY2tfaAorI2RlZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkluZmVycmVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
Ky8vIEluc2VydHMgYSB0eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0
aGUgZ2l2ZW4gaW5mZXJyZWQgdHlwZS4KK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisg
ICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBi
YXNlTm9kZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHSW5mZXJyZWRUeXBlQ2hlY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
Owogc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7
CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8g
a25vdyB0aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1
c2Ugd2UgbmVlZCB0byByZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3Ig
Z2V0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0
IHdoYXQgdHlwZSBpcworICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yIGluZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5
VHlwZUtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBl
S2V5X2gKKyNkZWZpbmUgREZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3BlcnR5
J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVuaXF1ZWRTdHJpbmdJbXBs
Ki4KKworY2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVR5cGVL
ZXkoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV91aWQobnVs
bHB0cikKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IG1fc3RydWN0dXJlKHN0
cnVjdHVyZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKworICAgIFByb3Bl
cnR5VHlwZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9v
YmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVkVUlEKCkpCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZSAmJiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3N0cnVjdHVyZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IHVpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdWlkOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlUeXBlS2V5
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhl
ci5tX3N0cnVjdHVyZQorICAgICAgICAgICAgJiYgbV91aWQgPT0gb3RoZXIubV91aWQ7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJI
YXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSArIFdURjo6UHRySGFzaDxVbmlxdWVk
U3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlkKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYg
bV91aWQgPT0gZGVsZXRlZFVJRCgpOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCks
ICIrIiwgbV91aWQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgVW5pcXVlZFN0cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0
YXRpY19jYXN0PGludHB0cl90PigxKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbV9z
dHJ1Y3R1cmU7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworfTsKKworc3RydWN0IFBy
b3BlcnR5VHlwZUtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3Bl
cnR5VHlwZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5
cGVLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVD
bGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBj
b25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0
eVR5cGVLZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVz
ZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgog
ICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAg
ICAgY2FzZSBGaW5hbE9iamVjdFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIzMiw2ICs1MjMyLDgwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2Yo
Tm9kZSoKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQ
UiwgR1BSUmVnIHRlbXBHUFIpCit7CisgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNp
emUoKSk7CisgICAgCisgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgp
WzBdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFy
eT4gc3RydWN0dXJlOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSOworICAgICAgICAKKyAg
ICAgICAgaWYgKHRlbXBHUFIgPT0gSW52YWxpZEdQUikgeworICAgICAgICAgICAgc3RydWN0dXJl
ID0gc3RkOjptYWtlX3VuaXF1ZTxHUFJUZW1wb3Jhcnk+KHRoaXMpOworICAgICAgICAgICAgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIgPSB0ZW1wR1BSOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgZG9uZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+
c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXIoSklUQ29tcGlsZXI6
OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRD
YWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsK
KyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAg
c3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5j
aElmQ2VsbCh2YWx1ZVJlZ3MpOworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IHZhbHVlUmVncywgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5s
aW5rKCZtX2ppdCk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIG5vUmVzdWx0KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVm
YXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtp
bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5v
ZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsK
QEAgLTU2MzYsNiArNTcxMCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxs
KEVkZ2UgCiAgICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0K
IAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQor
eworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBl
ZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRo
aXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7
CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRn
ZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIo
b3BlcmFuZC5qc1ZhbHVlUmVncygpLCB0ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOwor
fQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewog
ICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYw
MDYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2Fz
ZSBDZWxsVXNlOgogICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsK
KyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihl
ZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1
bGF0ZU9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMTUsNiArMjIxNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVj
dE9yTnVsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlVHlwZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVy
ZShOb2RlKiwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBp
bGVDaGVja1N0cnVjdHVyZShOb2RlKik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJl
Zyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVP
YmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4
OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9Ci0gICAgCisKICAgICAvLyBJbiBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkg
d2FudCB0byBkbyBpcyB2ZXJpZnkgd2hldGhlciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQs
IGFuZAogICAgIC8vIGlmIG5vdCwgZW51bWVyYXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNl
IHRoaXMgb25seSBpbiBjYXNlcyB3aGVyZSB0aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBt
ZWFuaW5nZnVsbHkgc3BlY2lhbCwgbGlrZSBmb3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAy
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gbV9zZXQub25seVN0cnVjdHVyZSgpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNo
KGZ1bmN0b3IpOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnBy
aW50KCJLbm93bkNlbGwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJV
c2U6CisgICAgICAgIG91dC5wcmludCgiQ2VsbE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93
bkJvb2xlYW5Vc2UsCiAgICAgQ2VsbFVzZSwKICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9y
T3RoZXJVc2UsCiAgICAgT2JqZWN0VXNlLAogICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2Jq
ZWN0VXNlLApAQCAtMTA4LDYgKzEwOSw4IEBAIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmls
dGVyRm9yKFVzZUsKICAgICBjYXNlIENlbGxVc2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAg
ICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAg
ICByZXR1cm4gU3BlY0NlbGwgfCBTcGVjT3RoZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAg
ICAgIHJldHVybiBTcGVjT2JqZWN0OwogICAgIGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxOCw2ICs0MTgsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6
CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25v
d25DZWxsVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVz
ZToKICAgICAgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjYsMjEgKzIwMjYsNTYgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUg
Y2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0
S2luZCBleGl0S2luZDsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAg
ICBzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1
Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVj
a1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAg
ZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0
cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBj
ZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9u
IikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwg
dW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNo
ZWNrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAg
ICBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0g
KFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFr
U3RydWN0dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhq
c1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhl
ciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlQ2hlY2tDZWxsKCkKQEAgLTQwMjIsNiArNDA1Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworCisgICAgICAgICAgICBjaGVj
a0luZmVycmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5
cGUoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAgICAg
ICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CkBA
IC01Njc0LDYgKzU3MTEsMTM0IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0Lmlu
dDMyLCByZXN1bHRzKTsKICAgICB9CisKKyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2Ug
ZWRnZSwgTFZhbHVlIHZhbHVlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUp
CisgICAgeworICAgICAgICAvLyBUaGlzIGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlw
ZUNoZWNrKCkgYmVjYXVzZSBpdCBpcyBjYWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlr
ZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAg
ICAgICAvLworICAgICAgICAvLyBtYXkgYmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNh
c2UgNDI6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7
CisgICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAg
ICAgIC8vICAgICBjYXNlIDQzOgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBl
KC4uLiwgdHlwZTIpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAg
IGJyZWFrOworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0
eXBlMSBhbmQgdHlwZTIgYXJlIGRpZmZlcmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVh
biB0aGF0IHRoZSBlZGdlIHdvdWxkIGJlCisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYg
dHlwZTIsIGluc3RlYWQgb2YgdHlwZTEgfCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAodHlwZS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUs
IHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5
cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVk
VHlwZTo6SW50MzI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVt
YmVyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLCBpc05vdE51bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dFN0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIGlmICgh
YWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHR5cGUuc3RydWN0dXJl
KCkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVy
cmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1
bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2Up
OworCisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNT
dWJzZXRPZih0eXBlLnN0cnVjdHVyZSgpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJ
RCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1
cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGlu
dWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBw
cm92ZW5UeXBlICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIElu
ZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
T3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
LCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENh
c2UpOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RP
YmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
CisgICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5T
cGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRv
cDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KICAgICAKICAgICBM
VmFsdWUgbG9hZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNzUxNCw2ICs3Njc5LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNl
OgorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC03NTk0LDYgKzc3NjIsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3Vs
YXRlIENlbGxPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2go
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShpc05vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzTm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hF
Q0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90
T3RoZXIodmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAg
aWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpAQCAtODEyNyw2ICs4MzEx
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmIChm
YWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsK
KwogICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBt
X2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KApAQCAtODEzNSw5ICs4
MzIyLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+
b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAgCisKICAg
ICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7
CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKKyAg
ICAgICAgICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxw
dHI7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG51bGxwdHI7CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3MCBAQCBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZk5vdFR5cGUoCisgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBc3Nl
bWJseUhlbHBlcnM6Okp1bXBMaXN0IHJlc3VsdDsKKworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5r
aW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICByZXN1bHQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvb2xlYW46CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RCb29sZWFuKHJlZ3Ms
IHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3Ro
ZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPdGhlcihyZWdzLCB0ZW1wR1BS
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAg
ICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVncykpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoSWZOb3ROdW1iZXIocmVncykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdz
LnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKHJlZ3Mu
cGF5bG9hZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7Cisg
ICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoU3RydWN0dXJlKHJlZ3MucGF5bG9hZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdChyZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90
aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5w
YXlsb2FkR1BSKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnB1cmlm
eU5hTihGUFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IGJy
YW5jaERvdWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MTksNiArNzE5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgSnVtcExpc3Qg
YnJhbmNoSWZOb3RUeXBlKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAg
ICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQg
bGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICsz
NzcsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAg
ICAgICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9Q
YXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChzdHVi
SW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICYmIE1h
Y3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0
b3JhZ2UpCi0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5m
ZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKIAogICAgICAgICAgICAgICAgIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcygKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MzMsNiArNjMzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1
dF9ieV9pZAogICAgICAgICBwY1s1XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBvZmZzZXQKICAg
ICAgICAgcGNbNl0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gbmV3IHN0cnVjdHVyZQogICAgICAg
ICBwY1s3XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBzdHJ1Y3R1cmUgY2hhaW4KKyAgICAgICAg
cGNbOF0udS5wdXRCeUlkRmxhZ3MgJj0gUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2s7CiAgICAg
ICAgIAogICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTY2
MCwxMiArNjYxLDE2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNldCgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHw9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwo
KSkucHV0QnlJZEZsYWdzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlk
Q2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAg
ICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgICAg
ICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAg
ICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgfD0KKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZs
YWdzKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyNjUsMTQgKzEyNjUsNzkgQEAg
X2xsaW50X29wX3B1dF9ieV9pZDoKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVDZWxsKHQzLCB0MCwgLm9wUHV0QnlJZFNsb3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QwXSwgdDIKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmlu
ZXEgdDIsIHQxLCAub3BQdXRCeUlkU2xvdworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0
MikKKyAgICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNs
b3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJy
ZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAj
IHQwIC0+IG9iamVjdCBiYXNlCiAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVj
dGlvbig4LCB0MSkKKworICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+
IG9iamVjdCBiYXNlCisgICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1
cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56
IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXIKKworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1
cmUgdHlwZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlTWFzaywgdDEKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmlu
ZywgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUg
b2YgdGhlIGZvbGxvd2luZzogU3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAg
IGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5
cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVj
dE9yT3RoZXIgb3IgVG9wLgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAu
b3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVj
dE9yT3RoZXIuCisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVj
dAorLm9wUHV0QnlJZFR5cGVDaGVja090aGVyOgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwg
dDMKKyAgICBicWVxIHQzLCBWYWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmpl
Y3RPck90aGVyOgorICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0
cW56IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkU2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0Nl
bGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBi
YmFlIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgLm9wUHV0QnlJZERvbmVDaGVja2lu
Z1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNz
VGhhblN0cmluZzoKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBC
b29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJlcgorICAgIGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlSW50MzIgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzIKKworICAgICMgV2Ug
YXJlIGVpdGhlciBJbnQzMiBvciBOdW1iZXIuCisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhh
bkludDMyOgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xl
YW4sIE90aGVyLgorICAgIGJwbmUgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9w
UHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXIKKyAgICB4b3JxIFZhbHVlRmFsc2UsIHQzCisg
ICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQ
dXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKKyAgICBicGVx
IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIK
KyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgorICAgIGJ0cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RX
aXRoU3RydWN0dXJlLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZQorICAg
IGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKworLm9wUHV0QnlJ
ZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgdXJzaGlmdHAgMywgdDEKKyAgICBi
aW5lcSB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKKworLm9w
UHV0QnlJZERvbmVDaGVja2luZ1R5cGVzOgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0
MSkKICAgICAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlvbgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDIyIEBAIGVs
c2UKICAgICBjb25zdCBMb3dlc3RUYWcgPSBEZWxldGVkVmFsdWVUYWcKIGVuZAogCisjIE5PVEU6
IFRoZSB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBQdXRCeUlk
RmxhZ3MuaC4KK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYKK2NvbnN0IFB1dEJ5
SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MAorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2Jq
ZWN0V2l0aFN0cnVjdHVyZSA9IDB4MgorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayA9
IC0weDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgwCitjb25zdCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBl
T3RoZXIgPSAweDEwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOAorY29u
c3QgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwCitjb25zdCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZVN0cmluZyA9IDB4MjgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0g
MHgzMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOAorY29u
c3QgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCisKIGNvbnN0IENhbGxPcENvZGVTaXpl
ID0gOQogCiBpZiBYODZfNjQgb3IgQVJNNjQgb3IgQ19MT09QCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUu
aCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0
IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZSIsIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlKSB9OworCitJbmZlcnJlZFR5cGUqIElu
ZmVycmVkVHlwZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVy
cmVkVHlwZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQor
eworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRU
eXBlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5
cGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorewor
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQg
SW5mZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJy
ZWRUeXBlKj4oY2VsbCk7CisKKyAgICBpZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKKyAg
ICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKGluZmVycmVkVHlwZS0+bV9z
dHJ1Y3R1cmUuZ2V0KCkpOworfQorCitJbmZlcnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIHN3aXRjaCAoZmxhZ3MgJiBQ
dXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNv
bmRhcnk6CisgICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sp
IHsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbToKKyAgICAgICAgICAg
IHJldHVybiBCb3R0b207CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFu
OgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICAgICAgY2FzZSBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAg
ICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOgorICAgICAgICAgICAgcmV0dXJu
IE51bWJlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVP
YmplY3Q6CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICBjYXNlIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90
aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wOgorICAgICAgICAgICAg
cmV0dXJuIFRvcDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOworICAgICAgICB9Cisg
ICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBy
ZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZTsKKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9v
bGVhbjsKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJu
IE90aGVyOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsK
KyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICBp
ZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxs
KCk7CisgICAgICAgIGlmIChjZWxsLT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0
cmluZzsKKyAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChj
ZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBj
ZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBUb3A7Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZs
YWdzKQoreworICAgIEtpbmQga2luZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmU7CisgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgc3Ry
dWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlE
KGZsYWdzKSk7CisgICAgZWxzZQorICAgICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIHJl
dHVybiBEZXNjcmlwdG9yKGtpbmQsIHN0cnVjdHVyZSk7Cit9CisKK1B1dEJ5SWRGbGFncyBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3I6OnB1dEJ5SWRGbGFncygpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmlt
YXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tOworICAgIGNhc2Ug
Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1
dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbjsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICByZXR1
cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhl
cjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vj
b25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMjsKKyAgICBjYXNlIE51bWJlcjoKKyAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlTnVtYmVyOworICAgIGNhc2UgU3RyaW5nOgorICAgICAgICByZXR1cm4gUHV0QnlJZFBy
aW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmc7CisgICAgY2Fz
ZSBPYmplY3Q6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdDsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAg
ICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdE9yT3RoZXI7CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybiBQdXRCeUlk
UHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcDsKKyAgICBjYXNl
IE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlIHwgZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkp
OworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHJldHVybiBQ
dXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVj
dHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUHV0QnlJZE5vbmU7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yOjptZXJnZShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAgICBp
ZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuOgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAq
dGhpcyA9IFRvcDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgIG1fa2luZCA9
IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIGNhc2UgSW50MzI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAg
IGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgbV9raW5kID0gTnVtYmVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgKnRoaXMgPSBPYmpl
Y3Q7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1
cmUpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAg
ICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5k
KSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIGlmICht
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9
IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhp
cyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAg
Y2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoK
KyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAg
ICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBP
YmplY3Q7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOgorICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7
CisgICAgRGVzY3JpcHRvciBtZXJnZWQgPSAqdGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIp
OworICAgIHJldHVybiAqdGhpcyA9PSBtZXJnZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVj
dHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29u
dGV4dCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30K
KworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0u
aW5mZXJyZWRUeXBlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFy
V2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30K
KworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBl
Y3RlZC5raW5kKCkgPT0gVG9wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9PSBleHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5
cGU6OmlzU3RpbGxWYWxpZChjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBpc1N0aWxsVmFsaWQo
bG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRv
cCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChs
b2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIs
IGRlc2NyaXB0b3IoKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNs
b3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgRGVzY3JpcHRvciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7
CisgICAgRGVzY3JpcHRvciBvdGhlclR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7
CisKKyAgICBteVR5cGUubWVyZ2Uob3RoZXJUeXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9y
KGxvY2tlcikgIT0gbXlUeXBlKTsgLy8gVGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2Un
cmUgb24gdGhlIHNsb3cgcGF0aC4KKworICAgIHNldChsb2NrZXIsIHZtLCBteVR5cGUpOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtKQoreworICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgc2V0KGxvY2tlciwgdm0sIFRvcCk7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sKKyAgICAvLyBXZSB3aWxs
IHRyaWdnZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5
LCB3cml0ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKKyAgICAvLyBjb3VsZCBjaGFuZ2Uu
IElmIGl0IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3Vs
ZCBoYXZlIHVzZWQKKyAgICAvLyBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGluIHRoZSBjYWxs
ZXIsIGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1heWJlIHRoYXQgd291bGRu
J3QgYmUKKyAgICAvLyBhIGdvb2QgaWRlYS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Mo
dm0uaGVhcCk7CisgICAgCisgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBub3QgcmVhbGx5
IGNoYW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCisg
ICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBUaGUgbmV3IGRlc2NyaXB0b3IgbXVzdCBiZSBtb3JlIGdlbmVyYWwgdGhh
biB0aGUgcHJldmlvdXMgb25lLgorICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN1YnN1bWVzKGRl
c2NyaXB0b3IobG9ja2VyKSkpOworCisgICAgLy8gSWYgdGhlIG5ldyBkZXNjcmlwdG9ycyBoYXZl
IGRpZmZlcmVudCBzdHJ1Y3R1cmVzLCB0aGVuIGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugb25lIGlz
IG51bGwuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSAhPSBuZXdEZXNj
cmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IobG9ja2VyKS5z
dHJ1Y3R1cmUoKSB8fCAhbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisKKyAgICAvLyBXZSBh
cmUgY2hhbmdpbmcgdGhlIHR5cGUsIHNvIG1ha2Ugc3VyZSB0aGF0IGlmIGFueW9uZSB3YXMgd2F0
Y2hpbmcsIHRoZXkgZmluZCBvdXQgYWJvdXQgaXQgbm93LiBJZgorICAgIC8vIGFueW9uZSBpcyB3
YXRjaGluZywgd2UgbWFrZSBzdXJlIHRvIGdvIHRvIFRvcCBzbyB0aGF0IHdlIGRvbid0IGRvIHRo
aXMgc29ydCBvZiB0aGluZyBhZ2Fpbi4KKyAgICBpZiAobV93YXRjaHBvaW50U2V0LnN0YXRlKCkg
IT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgIC8vIFdlIGNhbm5vdCBoYXZlIGJlZW4gaW52
YWxpZGF0ZWQsIHNpbmNlIGlmIHdlIHdlcmUsIHRoZW4gd2UnZCBhbHJlYWR5IGJlIGF0IFRvcC4K
KyAgICAgICAgQVNTRVJUKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQp
OworCisgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGRvIGV4cGVuc2l2ZSB0aGluZ3MgYmVjYXVz
ZSBzb21lIGNvbXBpbGVyIHRocmVhZCBkZWNpZGVkIHRvIHdhdGNoIHRoaXMgdHlwZSBhbmQKKyAg
ICAgICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFuZ2VkLiBBc3N1bWUgdGhhdCB0aGlzIHByb3BlcnR5
IGlzIGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBkbyBhbnkgbW9yZSB0aGluZ3MgZm9yCisgICAgICAg
IC8vIGl0LgorICAgICAgICBuZXdEZXNjcmlwdG9yID0gVG9wOworCisgICAgICAgIG1fd2F0Y2hw
b2ludFNldC5maXJlQWxsKCJJbmZlcnJlZCB0eXBlIGNoYW5nZWQiKTsKKyAgICB9CisKKyAgICAv
LyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2Vy
IG5lZWQgaXQuCisgICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBt
X3N0cnVjdHVyZSA9IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1
cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIFdl
IHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAgICAg
ICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0
ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHRoaXMsIG5ld0Rlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKS0+YWRkVHJh
bnNpdGlvbldhdGNocG9pbnQobV9zdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQuCisgICAgbV9raW5kID0g
bmV3RGVzY3JpcHRvci5raW5kKCk7CisKKyAgICAvLyBBc3NlcnQgdGhhdCB3ZSBkaWQgdGhpbmdz
LgorICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcik7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQoreworICAgIFZNJiB2bSA9ICpI
ZWFwOjpoZWFwKHRoaXMpLT52bSgpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9wYXJlbnQtPm1fbG9jayk7CisgICAgCisgICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yID0g
ZGVzY3JpcHRvcihsb2NrZXIpOworICAgIG5ld0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7
CisgICAgCisgICAgc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKEluZmVycmVk
VHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IG1fcGFyZW50KHBhcmVu
dCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVjdHVyZSkKK3sKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpmaXJlSW50ZXJuYWwoY29uc3QgRmly
ZURldGFpbCYpCit7CisgICAgbV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgpOworfQorCit2b2lk
IEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KCkKK3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcChtX3BhcmVudCktPnZtKCk7CisKKyAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWQobV9wYXJlbnQpKTsKKyAgICAKKyAgICBpZiAoIUhlYXA6Omlz
TWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgbV9wYXJlbnQtPnJlbW92ZVN0cnVj
dHVyZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBJbmZlcnJlZFR5cGU6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAg
IG91dC5wcmludCgiQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk90aGVyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Cisg
ICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6Cisg
ICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAg
ICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQo
Ik9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dE9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgb3V0LnByaW50KCJU
b3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmZkZWYgSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlX2gKKwor
I2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5j
bHVkZSAiUHV0QnlJZEZsYWdzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFu
IG9iamVjdCB1c2VkIGZvciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBvYmplY3QgcHJv
cGVydGllcy4KKworY2xhc3MgSW5mZXJyZWRUeXBlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5
cGUqIGNyZWF0ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgZW51bSBLaW5kIDogdWlu
dDhfdCB7CisgICAgICAgIEJvdHRvbSwKKyAgICAgICAgQm9vbGVhbiwKKyAgICAgICAgT3RoZXIs
CisgICAgICAgIEludDMyLAorICAgICAgICBOdW1iZXIsCisgICAgICAgIFN0cmluZywKKyAgICAg
ICAgT2JqZWN0V2l0aFN0cnVjdHVyZSwKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXIsCisgICAgICAgIE9iamVjdCwKKyAgICAgICAgT2JqZWN0T3JPdGhlciwKKyAgICAgICAgVG9w
CisgICAgfTsKKworICAgIEtpbmQga2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyk7CisgICAgCisg
ICAgYm9vbCBoYXNTdHJ1Y3R1cmUoS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgY2xhc3MgRGVzY3JpcHRvciB7CisgICAgcHVibGljOgorICAgICAgICBEZXNjcmlw
dG9yKCkKKyAgICAgICAgICAgIDogbV9raW5kKEJvdHRvbSkKKyAgICAgICAgICAgICwgbV9zdHJ1
Y3R1cmUobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRGVzY3JpcHRv
cihLaW5kIGtpbmQsIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cikKKyAgICAgICAgICAg
IDogbV9raW5kKGtpbmQpCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yVmFsdWUo
SlNWYWx1ZSk7CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yRmxhZ3MoVk0mLCBQdXRC
eUlkRmxhZ3MpOworCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IEJvdHRvbSAmJiAhbV9zdHJ1Y3R1
cmU7CisgICAgICAgIH0KKworICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQ7IH0KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZTsgfQorCisgICAgICAgIFB1dEJ5SWRGbGFncyBwdXRCeUlkRmxhZ3MoKSBjb25zdDsK
KworICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1ZhbHVlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICAgICAg
Y2FzZSBCb3R0b206CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y2FzZSBCb29sZWFuOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsK
KyAgICAgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCk7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAgICAgICBjYXNlIE51bWJlcjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGNhc2Ug
U3RyaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpOworICAgICAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1
cmU7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCisgICAgICAgICAgICAg
ICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkg
PT0gbV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3Ro
ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwg
dmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgVG9wOgorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9r
aW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09IG90
aGVyLm1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IERlc2NyaXB0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUq
Pjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAg
ICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvdGhlciBvbmUuCisg
ICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgS2luZCBtX2tpbmQ7CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAg
fTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nr
OyB9CisKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhyZWFkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0cnVj
dHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICB9CisgICAgCisgICAgRGVzY3JpcHRv
ciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7CisgICAgfQorICAgIERlc2NyaXB0
b3IgZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpOworICAg
IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2Vy
KSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKCkua2luZCgpOyB9CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVy
biBkZXNjcmlwdG9yKCkuc3RydWN0dXJlKCk7IH0KKworICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQgPT0gVG9wOyB9CisgICAgYm9vbCBpc1JlbGV2YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kICE9IFRvcDsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZl
cnJlZFR5cGUgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdCByZWxl
dmFudCBpZiBpdCdzIFRvcC4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgd2lsbFN0b3JlVmFsdWUo
Vk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRGVzY3JpcHRvciBjdXJyZW50
RGVzY3JpcHRvciA9IGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7CisgICAgICAgIGlmIChjdXJyZW50
RGVzY3JpcHRvci5pbmNsdWRlc1ZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50RGVzY3JpcHRvci5raW5kKCkgIT0gVG9wOworICAgICAgICByZXR1cm4gd2lsbFN0b3JlVmFs
dWVTbG93KHZtLCB2YWx1ZSk7CisgICAgfQorCisgICAgLy8gSW1tZWRpYXRlbHkgbWFrZXMgdGhp
cyB0eXBlIGlycmVsZXZhbnQuCisgICAgdm9pZCBtYWtlVG9wKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYWtlVG9wU2xv
dyh2bSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtl
cyBzZW5zZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBO
b3RlIHRoYXQKKyAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgor
ICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25z
dCBEZXNjcmlwdG9yJik7CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7Cisg
ICAgCisgICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgV2F0Y2hwb2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJ
bmZlcnJlZFR5cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAgICB2b2lkIHdpbGxT
dG9yZVZhbHVlU2xvdyhWTSYsIEpTVmFsdWUpOworICAgIHZvaWQgbWFrZVRvcFNsb3coVk0mKTsK
KyAgICB2b2lkIHNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9y
KTsKKyAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25jdXJyZW50
SklUTG9jayBtX2xvY2s7CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKKworICAg
IGNsYXNzIEluZmVycmVkU3RydWN0dXJlIDogcHVibGljIFdhdGNocG9pbnQsIHB1YmxpYyBVbmNv
bmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0
dXJlKEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWls
Jikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVy
cmlkZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEluZmVycmVkVHlwZSogbV9wYXJlbnQ7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgIH07CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCisgICAg
Ly8gTk9URTogSWYgdGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8gVG9wIGJl
Y2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgaXQgd291bGRuJ3QgYmUKKyAgICAvLyBwcm9maXRhYmxl
IHRvIHdhdGNoIGl0IGFnYWluLiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwg
YW5kIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIERGRworICAgIC8vIHRocmVhZC4gVGhlIERGRyB3
aWxsIHVzZSB0aGUgSW5mZXJyZWRUeXBlIGFzIHRoZSB0aGluZyB0aGF0IGl0IHdhdGNoZXMuCisg
ICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3dhdGNocG9pbnRTZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6SW5mZXJyZWRUeXBlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJl
ZFR5cGVUYWJsZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZVRhYmxlOjpzX2luZm8gPSB7ICJJbmZl
cnJlZFR5cGVUYWJsZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlVGFi
bGUpIH07CisKK0luZmVycmVkVHlwZVRhYmxlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKFZN
JiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlVGFibGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGVUYWJs
ZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0gc3RhdGljX2Nhc3Q8
SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZS0+SW5mZXJy
ZWRUeXBlVGFibGU6On5JbmZlcnJlZFR5cGVUYWJsZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVy
cmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5m
ZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0ganNDYXN0PEluZmVycmVkVHlwZVRh
YmxlKj4oY2VsbCk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIAorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3RhYmxlKSB7CisgICAgICAgIGlmIChlbnRy
eS52YWx1ZS0+aXNSZWxldmFudCgpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJ5
LnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnkudmFsdWUuY2xlYXIoKTsK
KyAgICB9Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgYXV0byBpdGVyID0gbV90YWJsZS5maW5kKHVpZCk7CisgICAgaWYgKGl0ZXIgPT0gbV90YWJs
ZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Ly8gVGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHBydW5lIGludmFsaWRhdGVkIHR5cGVzLgorICAg
IGlmICghaXRlci0+dmFsdWUtPmlzUmVsZXZhbnQoKSkgeworICAgICAgICBpdGVyLT52YWx1ZS5j
bGVhcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gaXRl
ci0+dmFsdWUuZ2V0KCk7Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6Omdl
dChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGdldChsb2NrZXIsIHVpZCk7Cit9CisKK0luZmVycmVk
VHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQor
eworICAgIHJldHVybiBnZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKK30KKworYm9vbCBJbmZlcnJl
ZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUoCisgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAg
Ly8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRo
cmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgCisgICAgaWYgKGFnZSA9PSBPbGRQcm9w
ZXJ0eSkgeworICAgICAgICBUeXBlVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQo
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRl
ci0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFic2VuY2Ugb24gcmVwbGFj
ZSA9PiB0b3AuCisgICAgICAgIAorICAgICAgICBpZiAoaXRlci0+dmFsdWUtPndpbGxTdG9yZVZh
bHVlKHZtLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAg
ICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBUeXBlVGFibGU6OkFkZFJlc3VsdCByZXN1bHQ7CisgICAgeworICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFk
ZChwcm9wZXJ0eU5hbWUsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOworICAgIH0KKyAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJl
ZFR5cGUgPSBJbmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCBp
bmZlcnJlZFR5cGUpOworICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxn
b3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlm
aWVzIHRoZSBoYXNoIG1hcC4KKyAgICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAg
IFR5cGVUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybjsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKworICAgICAgICBp
dGVyLT52YWx1ZS0+bWFrZVRvcCgpOworICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgVHlwZVRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV90YWJsZS5hZGQo
cHJvcGVydHlOYW1lLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICBpZiAoIXJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5tYWtlVG9wKCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5j
bGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUg
SW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVk
ZSAiSlNDZWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVk
IHR5cGVzIGZvciBzb21lIHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQg
c2ltcGxpZmllcyB0aGUgU3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlw
ZSBlYXNpZXIgdG8gbWFuYWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtu
b3cgdGhhdCB0aGlzIHRoaW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlz
IHJ1bm5pbmcuIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9z
dCBwcm9wZXJ0aWVzCisvLyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9z
dCBwcm9wZXJ0aWVzIGFyZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9w
ZXJ0eSIKKy8vIGFzIGJlaW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28s
IHRoaXMgd2lsbCBoYXBwaWx5IGNvbmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20K
Ky8vIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50
IGRpc2pvaW50IHNldHMgb2Ygb2JqZWN0cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwor
CisgICAgc3RhdGljIEluZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9
CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLmlzRW1wdHkoKTsg
fQorCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVsbHB0
ciBmb3IgYm90aCBUb3AgYW5kIEJvdHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCisgICAg
Ly8gb3duaW5nIFN0cnVjdHVyZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5LgorICAg
IEluZmVycmVkVHlwZSogZ2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3Ry
aW5nSW1wbCopOworICAgIEluZmVycmVkVHlwZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7Cisg
ICAgSW5mZXJyZWRUeXBlKiBnZXQoUHJvcGVydHlOYW1lKTsKKworICAgIGVudW0gU3RvcmVkUHJv
cGVydHlBZ2UgeworICAgICAgICBOZXdQcm9wZXJ0eSwKKyAgICAgICAgT2xkUHJvcGVydHkKKyAg
ICB9OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0
aGlzIHByb3BlcnR5IGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QK
KyAgICAvLyByZWxldmFudCBpZiBpdCdzIFRvcC4gTm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBp
bnRlcm5hbGx5IHBydW5lIFRvcCBlbnRyaWVzLgorICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0m
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworICAgIC8vIElu
dmFsaWRhdGVzIHRoZSB0eXBlIGZvciB0aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3Qg
YSBzdG9yZSBpbiBhIHJlZmxlY3RpdmUgY29udGV4dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQ
cm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJl
ZFR5cGVUYWJsZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGVUYWJsZSgpOworCisgICAgLy8gQm90
dG9tOiBhYnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8gVG9wOiBudWxsIHZhbHVlIGluIHRhYmxl
LCAhdmFsdWUtPmlzUmVsZXZhbnQoKSwgb3IgYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vCisg
ICAgLy8gV2Uga25vdyBob3cgdG8gZGV0ZXJtaW5lIGlmIGFic2VuY2UgZnJvbSB0aGUgdGFibGUg
aXMgYm90dG9tIG9yIHRvcCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAvLyBwcm9wZXJ0
eSBpcyBwcmVzZW50IGluIHRoZSBvd25pbmcgc3RydWN0dXJlLiBIZW5jZSwgZGVwZW5kaW5nIG9u
IHRoZSBzdHJ1Y3R1cmUsIGFic2VuY2UgbWF5IGhhdmUKKyAgICAvLyBkaWZmZXJlbnQgbWVhbmlu
Z3MuIFRoZSB3YXkgdGhhdCB0aGlzIGNsYXNzIGRldGVybWluZXMgaWYgdGhlIG93bmluZyBzdHJ1
Y3R1cmUga25vd3Mgb2YgdGhlIHByb3BlcnR5CisgICAgLy8gaXMgdGhhdCB3ZSBkaWZmZXJlbnRp
YXRlIGJldHdlZW4gYWN0aW9uczogcmVwbGFjZSBvciB0cmFuc2l0aW9uLiBJZiB3ZSdyZSBhZGRp
bmcgYSBuZXcgcHJvcGVydHkKKyAgICAvLyAodHJhbnNpdGlvbiksIHRoZW4gYWJzZW5jZSBtZWFu
cyBib3R0b20uIElmIHdlJ3JlIHN0b3JpbmcgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkgKHJlcGxh
Y2UsIHRoZW4KKyAgICAvLyBhYnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdl
IGhhdmUgdG8gd2F0Y2ggb3V0IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEg
YW5kCisgICAgLy8gUzIsIHNoYXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0
aGVyIG9mIHRoZW0gaW5pdGlhbGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5CisgICAg
Ly8gd2FudCB0byBhZGQgUCB3aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRk
IFAgd2l0aCBhIHR5cGUuIElmIFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAgIC8vIHRv
IGluZGljYXRlIFRvcCwgdGhlbiBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90
dG9tIGFuZCB3b3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50cnkgaW4g
dGhlIHRhYmxlLiBUaGVuIFMxIHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3
b3VsZCB1c2UgUzIncyB0eXBlLiBDbGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lk
IHN1Y2ggY29uZnVzaW9uIGJ5IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRz
IGFuIGVudHJ5LiBIZW5jZSwKKyAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVz
IGludG8gcGxheSBmb3IgcHJvcGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRh
YmxlIHdhcworICAgIC8vIGNyZWF0ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlx
dWVkU3RyaW5nSW1wbD4sIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVw
SGFzaCwgSGFzaFRyYWl0czxVbmlxdWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7CisgICAgCisg
ICAgVGFibGVUeXBlIG1fdGFibGU7CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBsb2NrIHdo
ZW4gd2UncmUgZG9pbmcgbW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9yIHJlYWRz
IG9uIHRoZSBjb21waWxlcgorICAgIC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVhZCBpcyBu
b3QgYWxsb3dlZCB0byBkbyBtb2RpZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRMb2NrIG1f
bG9jazsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBl
VGFibGVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KSB7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAg
ICAgICAKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBA
IC0xMjI4LDYgKzEyMzAsOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNp
dHkgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgb2Zmc2V0KSkgeworICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNp
dGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7
CisgICAgICAgIAogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50
Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMjQ0LDEy
ICsxMjQ4LDE2IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAg
ICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgYm9v
bCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiAgICAgaWYgKG9m
ZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0
KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKQorICAgICAgICAgICAgc3RydWN0
dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2Uodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QuY29udGV4dCgpID09IFB1dEJ5SWQpOworCiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9w
ZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OwogCkBAIC0xMjY5LDYgKzEyNzcsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwoCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUg
ZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKICAgICAKICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsK
KyAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0QnlJZCk7CiAgICAgCiAgICAgdmFsaWRh
dGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTEgKzM1MCwxNSBAQCB2b2lkIFN0
cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9w
ZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJs
ZSogdHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6
ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0
cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3Ry
dWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAm
JiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQorICAg
ICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJvcGVydHlU
YWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNl
dE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTQ2NCw2ICs0NjgsNyBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0
cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9y
Q2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJl
LT5tX29mZnNldDsKKyAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJl
TnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgp
KTsKIAogICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKTsKIApAQCAtNDc5LDYgKzQ4NCwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRy
YW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKKyAgICAvLyBOT1RFOiBUaGVyZSBh
cmUgc29tZSBnb29kIHJlYXNvbnMgd2h5IHRoaXMgZ29lcyBkaXJlY3RseSB0byB1bmNhY2hlYWJs
ZSBkaWN0aW9uYXJ5IHJhdGhlciB0aGFuCisgICAgLy8gY2FjaGluZyB0aGUgcmVtb3ZhbC4gV2Ug
Y2FuIGZpeCBhbGwgb2YgdGhlc2UgdGhpbmdzLCBidXQgd2UgbXVzdCByZW1lbWJlciB0byBkbyBz
bywgaWYgd2UgZXZlciB0cnkKKyAgICAvLyB0byBvcHRpbWl6ZSB0aGlzIGNhc2UuCisgICAgLy8K
KyAgICAvLyAtIENhY2hlZCB0cmFuc2l0aW9ucyB1c3VhbGx5IHN0ZWFsIHRoZSBwcm9wZXJ0eSB0
YWJsZSwgYW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGV5CisgICAg
Ly8gICBjYW4ganVzdCByZWJ1aWxkIHRoZSB0YWJsZSBieSBsb29raW5nIGF0IHBhc3QgdHJhbnNp
dGlvbnMuIFRoYXQgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHRhYmxlIG9ubHkKKyAgICAvLyAgIGdy
ZXcgYW5kIG5ldmVyIHNocmFuay4gVG8gc3VwcG9ydCByZW1vdmFscywgd2UnZCBoYXZlIHRvIGNo
YW5nZSB0aGUgcHJvcGVydHkgdGFibGUgbWF0ZXJpYWxpemF0aW9uCisgICAgLy8gICBjb2RlIHRv
IGhhbmRsZSBkZWxldGlvbnMuIEFsc28sIHdlIGhhdmUgbG9naWMgdG8gZ2V0IHRoZSBsaXN0IG9m
IHByb3BlcnRpZXMgb24gYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vICAgbGFja3MgYSBwcm9wZXJ0
eSB0YWJsZSBieSBqdXN0IGxvb2tpbmcgYmFjayB0aHJvdWdoIHRoZSBzZXQgb2YgdHJhbnNpdGlv
bnMgc2luY2UgdGhlIGxhc3QKKyAgICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBpbm5lZCB0
YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBoYW5kbGUg
Y2FjaGVkCisgICAgLy8gICByZW1vdmFscy4KKyAgICAvLworICAgIC8vIC0gSW5mZXJyZWRUeXBl
VGFibGUgYXNzdW1lcyB0aGF0IHJlbW92YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlzIGlzIGlt
cG9ydGFudCBzaW5jZSBpZiB3ZSBjb3VsZAorICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVydHkgYW5k
IHRoZW4gcmUtYWRkIGl0IGxhdGVyLCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3AiIG9wdGlt
aXphdGlvbiB3b3VsZG4ndAorICAgIC8vICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVtb3ZhbCBh
bHNvIGVpdGhlciBwb2lzb25lZCB0eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRoaW5nIGVx
dWl2YWxlbnQgdG8KKyAgICAvLyAgIGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJvbmdseSBt
YXJraW5nIHRoZSBlbnRyeSBhcyBUb3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QgYWJzZW50
LCBidXQKKyAgICAvLyAgIGluc3RlYWQsIGhhcyBhIG51bGwgZW50cnkuCisgICAgCiAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUpOwpAQCAtODQxLDYgKzg2NCw0MyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRj
aGluZ0ludGVybmFsUHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7
CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGlt
aXplLAorICAgIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7Cisg
ICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKKyAgICBBU1NFUlQoIWhhZEJlZW5EaWN0aW9uYXJ5
KCkpOworCisgICAgLy8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2lu
ZyBhbnl0aGluZyBlbHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFk
eQorICAgIC8vIGdyYWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBJ
bmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAg
IGlmICghdGFibGUpIHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRl
KHZtKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlQmFycmllcigpOworICAgICAgICBtX2luZmVy
cmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRoaXMg
b25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRh
YmxlKiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eSh2bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBh
ZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQg
aXQgd2FzIHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0
eSB0YWJsZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisgICAgLy8gLi4uIGFu
ZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5TWFwRW50cnkqIGVu
dHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgQVNTRVJU
KGVudHJ5KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAgZW50cnktPmhhc0lu
ZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYWdlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5
TmFtZSwgYWdlKTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOworICAg
IH0KK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVydHlNYXBIYXNoVGFi
bGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0xMDU4LDYgKzExMTgs
OCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIH0g
ZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlz
T2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1
cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUg
IkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5o
IgpAQCAtODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlx
dWVkU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1aW50
OF90IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVz
IHdoZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5cGUgaW4gdGhlIGlu
ZmVycmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hlY2sgaW4gSlNPYmpl
Y3Q6OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVudHJ5KCkKICAgICAg
ICAgOiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAg
ICAgLCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAg
IHsKICAgICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5
IHsKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAg
ICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxz
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMp
OwogICAgIH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNl
dCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IGdl
dChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVy
cmVkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9k
LiBJdCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAg
ICAgLy8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhl
IGxvY2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ4MSw2ICs0ODYsNDEg
QEAgcHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQ
cm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wgaGFzSW5mZXJyZWRU
eXBlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVycmVkVHlwZVRhYmxl
OworICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxl
ID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS0+
Z2V0KHVpZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBpbmZl
cnJlZFR5cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1dC0+ZGVzY3JpcHRvcigp
OworICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBpcyBzdGlsbCB2YWxpZC4KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAgICAg
ICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8
fCAoIXNob3VsZE9wdGltaXplICYmICFtX2luZmVycmVkVHlwZVRhYmxlKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6Ok5ld1Byb3BlcnR5KTsKKyAg
ICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAg
ICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZE9wdGltaXplKQorICAgIHsKKyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdpbGxTbG9yZVZhbHVlU2xvdyh2bSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpP
bGRQcm9wZXJ0eSk7CisgICAgfQorCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9T
dHJ1Y3R1cmVTaGFwZShKU1ZhbHVlKTsKICAgICAKICAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0
d28gc3RydWN0dXJlcyBtYXRjaCBlbm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZv
ciBhbGxvY2F0aW9ucwpAQCAtNjMyLDYgKzY3Miw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAgICB2b2lkIHdpbGxT
dG9yZVZhbHVlU2xvdygKKyAgICAgICAgVk0mLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOwor
CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBz
dGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0g
NTEyOwogCkBAIC02NTUsNiArNjk4LDggQEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNj
ZXNzZWQgdGhyb3VnaCBwcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0
byAwIGJ5IGFub3RoZXIgdGhyZWFkLgogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBt
X3Byb3BlcnR5VGFibGVVbnNhZmU7CiAKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFi
bGU+IG1faW5mZXJyZWRUeXBlVGFibGU7CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRT
ZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTkgKzc1LDE5IEBAIGlubGluZSBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9w
ZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJv
cGVydHlUYWJsZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gaW52
YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJs
ZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9m
ZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBib29s
IGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAg
cmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUp
OworfQorCitBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wm
IGhhc0luZmVycmVkVHlwZSkKK3sKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCkBAIC0x
MDEsNiArMTAxLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6Ogog
ICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+
YXR0cmlidXRlczsKKyAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5mZXJyZWRUeXBl
OwogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261223</attachid>
            <date>2015-09-15 12:12:44 -0700</date>
            <delta_ts>2015-09-15 14:44:44 -0700</delta_ts>
            <desc>starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>163155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDUsNiArNzQ3LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5
MjMsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3Myw2ICsyNTgxLDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0
NjYzLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00Njg2LDYgKzQ2OTgsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3
NTIsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDQzLDkgKzUwNTks
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE5Nyw2ICs1MjEzLDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzQ0LDYgKzUzNjEsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTM0LDYgKzU5NTIsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDQ3LDYg
KzYwNjYsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMyLDYgKzYzNTIsNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5Nyw2ICs2
NTE4LDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQzOSw2ICs3NDYxLDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4NTMsNiArNzg3Niw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0IEBAIG5hbWVzcGFjZSBX
VEYgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0
cmluZ091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQ
dXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChjb21tYSwgIklzRGlyZWN0
Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7CiAKLSAgICBDU3RyaW5n
IHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJp
bnQoc3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6
a2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOworICAgIGlm
IChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMg
KzI2LDcwIEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5lIFB1dEJ5SWRGbGFnc19o
CiAKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGludHB0cl90IHsKICAgICBQ
dXRCeUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQorCisgICAgLy8gVGhpcyBm
bGFnIGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0LiBUaGF0IG1lYW5zIHRo
YXQgd2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBjaGVja2luZyBpZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEs
CisgICAgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCisKKyAgICAvLyBOT1RFOiBU
aGUgdmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20uCisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJy
ZWQgdHlwZSBpbnZvbHZlcyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFu
ZCB0aGVuCisgICAgLy8gdXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRo
ZSBzZWNvbmRhcnkgbWFzazoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlU
eXBlTWFzaykgeworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAg
IC8vICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAg
Ly8gICAgIC4uLgorICAgIC8vICAgICB9CisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAvLyBjYXNlIFB1dEJ5
SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIC8vICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKKyAgICAvLyAg
ICAgYnJlYWs7CisgICAgLy8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCisg
ICAgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRo
ZSBzZWNvbmRhcnkgdHlwZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0
dXJlIElELgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
ID0gMHg0LCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorCisgICAgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRv
bSA9IDB4MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCisgICAgUHV0
QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJ
bnQzMiA9IDB4MTgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAorICAg
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdCA9IDB4MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
ID0gMHgzOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKIH07CiAKK2lubGlu
ZSBQdXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJlSUQgaWQpCit7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKSA8PCAzKTsKKyNlbHNlCisgICAgUHV0QnlJZEZsYWdz
IHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKTsKKyAgICBBU1NFUlQoIShy
ZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbmRpZgorfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb2RlU3RydWN0dXJlSUQoUHV0QnlJ
ZEZsYWdzIGZsYWdzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFN0cnVjdHVyZUlEPihmbGFncyA+PiAzKTsKKyNlbHNlCisgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spOworI2Vu
ZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3Ry
dWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQp
KTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CkBAIC0xMDMsNyArMTAzLDggQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
KyAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBu
ZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCkBAIC0xNjIsNyArMTYzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3Ap
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KQEAgLTE5Myw3ICsxOTQsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yMDYsNyArMjA4LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQs
IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZl
cnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzI5LDggKzMzMiwxMCBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28s
IGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0KKyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlw
dG9yRm9yKHVpZCkpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJp
YW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0zNTYsMTMgKzM2MSwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAg
ICAKICAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3Ry
dWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJl
LCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1
bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJh
bnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICgh
ZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBtX3JlcXVpcmVkVHlwZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVs
c2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9w
ZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYg
Kzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
IHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC04NSw2ICs5MCw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdU
Rjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5m
ZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwx
MiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYg
KG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9yZXF1aXJlZFR5cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFj
ZToKKyAgICBjYXNlIFJlcGxhY2U6IHsKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsK
ICAgICAgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2Fz
ZSBSZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIs
IGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgp
LCAiPiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCks
CisgICAgICAgICAgICAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
VHJhbnNpdGlvbjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9u
OiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAg
ICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsi
LAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJl
ZFR5cGUoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1
YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1
dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1
cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlP
ZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFBy
b3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2
ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9
CiAKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHBy
aXZhdGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJQYXJz
ZXJNb2Rlcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlJlZ0V4cC5o
IgogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaCIKQEAgLTk4LDEyICs5NywxMCBAQCBzdHJ1Y3QgVW5saW5rZWRJbnN0cnVj
dGlvbiB7CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQogICAg
IFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2Rl
OyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBv
cGVyYW5kOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsg
dS5wdXRCeUlkRmxhZ3MgPSBmbGFnczsgfQogICAgIHVuaW9uIHsKICAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
OwotICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzOwogICAgIH0gdTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiwzOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICB0b3VjaChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwogICAgIH0KLSAgICAKKworICAg
IC8vIE5vdGUgdGhhdCBmb3IgYW55IHdhdGNocG9pbnQgdGhhdCBpcyB2aXNpYmxlIGZyb20gdGhl
IERGRywgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIHdyaXRlIGNvZGUgbGlrZToKKyAgICAvLwor
ICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgpCisg
ICAgLy8KKyAgICAvLyBDb25jdXJyZW50bHkgdG8gdGhpcywgdGhlIERGRyBjb3VsZCBkbzoKKyAg
ICAvLworICAgIC8vIGlmICh3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBwZXJmb3JtIG9w
dGltaXphdGlvbnM7CisgICAgLy8gaWYgKCF3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBy
ZXRyeSBjb21waWxhdGlvbjsKKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGUgREZHIGFsZ29y
aXRobSBpcyB3aWRlc3ByZWFkLCBhbmQgc291bmQsIGJlY2F1c2UgZmlyZUFsbCgpIGFuZCBpbnZh
bGlkYXRlKCkgd2lsbCBsZWF2ZQorICAgIC8vIHRoZSB3YXRjaHBvaW50IGluIGEgIWlzU3RpbGxW
YWxpZCgpIHN0YXRlLiBIZW5jZSwgaWYgZmlyZUFsbCgpIG9yIGludmFsaWRhdGUoKSBpbnRlcmxl
YXZlZCBiZXR3ZWVuCisgICAgLy8gdGhlIGZpcnN0IGlzU3RpbGxWYWxpZCgpIGNoZWNrIGFuZCB0
aGUgc2Vjb25kIG9uZSwgdGhlbiBpdCB3b3VsZCBzaW1wbHkgY2F1c2UgdGhlIERGRyB0byByZXRy
eQorICAgIC8vIGNvbXBpbGF0aW9uIGxhdGVyLgorICAgIC8vCisgICAgLy8gQnV0LCBpZiB5b3Ug
Y2hhbmdlIHNvbWUgcGllY2Ugb2Ygc3RhdGUgdGhhdCB0aGUgREZHIG1pZ2h0IG9wdGltaXplIGZv
ciwgYnV0IGludmFsaWRhdGUgdGhlCisgICAgLy8gd2F0Y2hwb2ludCBieSBkb2luZzoKKyAgICAv
LworICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgp
CisgICAgLy8KKyAgICAvLyB0aGVuIHRoZSBERkcgd291bGQgbmV2ZXIga25vdyB0aGF0IHlvdSBp
bnZhbGlkYXRlZCBzdGF0ZSBiZXR3ZWVuIHRoZSB0d28gY2hlY2tzLgorICAgIC8vCisgICAgLy8g
VGhlcmUgYXJlIHR3byB3YXlzIHRvIHdvcmsgYXJvdW5kIHRoaXM6CisgICAgLy8KKyAgICAvLyAt
IENhbGwgZmlyZUFsbCgpIHdpdGhvdXQgYSBpc0JlaW5nV2F0Y2hlZCgpIGNoZWNrLiBUaGVuLCB0
aGUgREZHIHdpbGwga25vdyB0aGF0IHRoZSB3YXRjaHBvaW50IGhhcworICAgIC8vICAgYmVlbiBp
bnZhbGlkYXRlZCB3aGVuIGl0IGRvZXMgaXRzIHNlY29uZCBjaGVjay4KKyAgICAvLworICAgIC8v
IC0gRG8gbm90IGV4cG9zZSB0aGUgd2F0Y2hwb2ludCBzZXQgdG8gdGhlIERGRyBkaXJlY3RseSwg
YW5kIGhhdmUgeW91ciBvd24gd2F5IG9mIHZhbGlkYXRpbmcgd2hldGhlcgorICAgIC8vICAgdGhl
IGFzc3VtcHRpb25zIHRoYXQgdGhlIERGRyB0aHJlYWQgdXNlZCBhcmUgc3RpbGwgdmFsaWQgd2hl
biB0aGUgREZHIGNvZGUgaXMgaW5zdGFsbGVkLgogICAgIGJvb2wgaXNCZWluZ1dhdGNoZWQoKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKGlzRmF0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTIsNyArMjExMiw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0QnkKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsg
Ly8gbmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gc3RydWN0
dXJlIGNoYWluCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFB1dEJ5SWROb25lKTsgLy8gaXMg
bm90IGRpcmVjdAorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KFB1
dEJ5SWROb25lKSk7IC8vIGlzIG5vdCBkaXJlY3QKIAogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAg
LTIxMzQsNyArMjEzNCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGly
ZWMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCgwKTsgLy8gbmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsgLy8gc3RydWN0dXJlIGNoYWluICh1bnVzZWQgaWYgZGlyZWN0KQotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCgocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8
IHByb3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRC
eUlkSXNEaXJlY3QgOiBQdXRCeUlkTm9uZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0
YXRpY19jYXN0PGludD4oKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
ci5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBT
cGVjTm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0
KTsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQsIGFkbWl0dGVkVHlw
ZXMpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTM5LDcgKzEz
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2Rl
KSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0
cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBl
IGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJB
cnJheU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRp
b25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVj
dHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpCisgICAgICAg
IGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAgICAgICAgICAgICAmJiAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0Nl
bGwpKSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCBt
X2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CisgICAgICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCk7
CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSAtIGlzIGl0IFRPUCwg
YSBjb25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBz
dWJ0bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBn
aXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2Un
ZAogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgogICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1
bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdWlkLCBzdGF0
dXNbaV0ub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09
IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0g
cmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTg4MCw3
ICsxODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVl
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJl
YWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0
cnVjdHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIgKzE4NzcsMjMgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyB0aGF0IGluY2x1ZGVz
IHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNvdWxkIG1ha2UgdGhlIHN0
cnVjdHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4gV2UgY3VycmVudGx5IGRv
bid0LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQog
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENlbGxPck90aGVyOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNP
dGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOworICAgICAgICAK
KyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4NCwyOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQpOwotICAgICAg
ICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5m
cmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJl
cl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMgdGhhdCBoYW5kbGVzIGlu
ZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5nIHRoZSBzdHJ1Y3R1cmUK
KyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90IG9wdGltYWwuIEluIHNv
bWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAodXN1YWxseQorICAgICAg
ICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkgQ1NFIGZvciBleGFtcGxl
KSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIGF0
IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHksIHdoZW4gdGhhdCBo
YXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAgICAgLy8gb24gdGhlIHR5
cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4KKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5vZmZzZXQsIG1fc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhh
dCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0aCBpcyBiZXR0ZXIuCisg
ICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAgICAgICB0eXBlRnJvbVBh
cnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEtPmluZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOwor
CisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2
YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2JhYmx5CisgICAgICAgIC8v
IGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgorICAgICAg
ICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZh
bHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1
ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAsNiArMjEzNiw4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVz
ZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9u
bHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcl07CisKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0
cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTIx
MjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6
Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRDYXNlLm1ldGhv
ZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3Rh
bnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAg
ICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisg
ICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0
aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAg
bV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAot
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICBjYXNlIEdldEJ5
T2ZmZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoCisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIGdldENhc2UubWV0aG9kKCkub2Zmc2V0KCksIG1f
Z3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAg
IHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfSB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlv
bikKQEAgLTIxNjMsNiArMjE5Miw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAg
ICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdWYWx1ZTsKICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBA
IC0yMTcwLDYgKzIyMDEsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAo
dGhpc1NldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKKyAgICAgICAgICAg
IHRoaXNWYWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CisgICAg
ICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzdmFsdWUpOworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5h
cHBlbmQoCkBAIC0yMTg1LDYgKzIyMjEsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhjbG9iYmVyTGltaXQsIHRy
YW5zaXRpb25zKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0
cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICBt
X3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBmb3Iobm9kZShub2RlLT5jaGlsZDIo
KSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVz
dWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2NCwxMyArMjMwMywxMyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1
c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1
Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAg
ICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAg
ICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNp
dGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogRmls
dHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zmls
dGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkK
KyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1
bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0gICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBo
LCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNl
dCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlvbk9LKQogICAgICAgICByZXR1cm4gRmlsdHJh
dGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgcmV0dXJuIENvbnRy
YWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTYg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNo
IChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Cisg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090aGVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAg
ICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgc2V0
KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAg
c2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
c2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgbWVyZ2UoU3BlY090
aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6Cisg
ICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIHNldFR5cGUoZ3JhcGgs
IFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3AoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQWJz
dHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRl
KQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgaWYgKGNsb2JiZXJTdGF0ZSA9
PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOwor
fQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYg
Z3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
cmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAtMTg5LDggKzIzOSwyMiBA
QCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAgICAgcmV0dXJuIG9s
ZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRl
cihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCitib29sIEFic3RyYWN0
VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOwor
ICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVycmVkVHlwZSk7CisKKyAgICBBYnN0cmFjdFZh
bHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVl
KTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9PSB0eXBlVmFsdWU7Cit9CisKK0ZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKK3sKKyAg
ICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAoaXND
bGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcgKzI2
Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAvLyBo
YXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgIAot
ICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90
eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlwZXM7
CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwog
ICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkBAIC0zMTUsNiArMzc5LDEzIEBA
IEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMKICAgICByZXR1cm4gQ29u
dHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIo
R3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKKyAgICBmaWx0ZXJWYWx1ZS5zZXQo
Z3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBmaWx0ZXIoZmlsdGVyVmFsdWUpOworfQor
CiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBj
b3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiCisjaW5j
bHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3Bl
Y3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgpAQCAtMjE0LDcgKzIxNSwx
MCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7
CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHNl
dChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgIHZvaWQgc2V0
KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgU3RydWN0dXJlQ2xvYmJl
clN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9k
ZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZml4VHlw
ZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwogICAgIApAQCAtMjgwLDE3ICsyODQs
MjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuICEobV90
eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisKKyAgICBib29sIGlzVHlwZShHcmFwaCYsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgLy8gRmlsdGVycyB0
aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElmIHRoZSBhZG1pdHRlZFR5
cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAgICAvLyBpbXBsaWNpdGx5IGZpbHRl
cnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFyZSB1
c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwuIEhlbmNlLCBhZnRlciB0aGlzIGNh
bGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24tY2VsbCBtZW1iZXJzLiBC
dXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21lIG5v
bi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0byBv
dmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
cihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlw
ZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgm
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5
TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5W
YWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0
VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBjaGFu
Z2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKICAgICBib29s
IGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCB2YWxpZGF0ZShK
U1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsOSArMjA2LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wg
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5h
bEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwot
ICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0
KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwg
Tm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNl
ZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJlIHNldC4gRG9lcyBub3QKICAgICAv
LyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlvbiwgYnV0IGl0IG1heSByZXR1cm4g
YSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJhZGljdGlvbi4KQEAgLTIzMDcsNyAr
MjMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVk
VHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlm
IChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxOCwxMyArMjMxOSwxNiBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zm
c2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVt
YmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAgICAKICAgICBO
b2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwogCiAgICAgcmV0dXJuIGdldEJ5T2Zm
c2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSog
YmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2
YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKKyAgICBOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlLAorICAgIE5vZGUqIHZhbHVl
KQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
b2Zmc2V0KSkKQEAgLTIzMzUsNiArMjMzOSw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAg
ZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CisgICAgZGF0YS0+aW5mZXJyZWRU
eXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgo
UHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7
CiAgICAgCkBAIC0yNDQ5LDcgKzI0NTQsOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgK
ICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25z
dGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6
IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0
KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCks
IG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJl
ZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5m
ZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6
TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBA
IC0yNTU1LDEzICsyNTYxLDEzIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAog
ICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwor
ICAgIAogICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU09iamVjdCo+KCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhl
IHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5n
IGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hl
ZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1
Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAg
ICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghdmFyaWFu
dC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJh
c2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBv
bmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMg
aW4gdGhlCkBAIC0yNjI2LDkgKzI2MzIsMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQo
CiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtK
U0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQorCisgICAgICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CisgICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2sp
IHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVj
dHVyZVNldCgpKQorICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZS5tZXJnZShtX2dyYXBoLmlu
ZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgICAgIAog
ICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgbG9h
ZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxv
YWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBsb2FkT3ApOwogICAgIH0KIAogICAg
IHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2MzksNyArMjY1Miw3IEBAIE5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlTGlr
ZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0
KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChi
YXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGhh
bmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlh
bnQuaW5mZXJyZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlJZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCisj
aW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25T
ZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIK
QEAgLTQ0OCw2ICs0NDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEFTU0VSVChjaGls
ZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsK
KyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlVmFsdWUgPSBtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpOwogCiAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVj
dXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdl
dCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1
ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5n
cyB0byB0aGlzLgpAQCAtNDYzLDcgKzQ2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdHVzLm51bVZhcmlhbnRzKCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+IDEgJiYgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUpKQpAQCAtNjY2LDYgKzY2OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJ
bkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAg
ICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBp
bmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpLCB2YXJpYW50LnJlcXVp
cmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2Vs
bFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRGVzaXJl
ZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRo
aXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3RhdGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBz
cGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0byBoYXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRU
eXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVjdCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmln
aW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZEluZmVycmVkVHlwZSB7CitwdWJsaWM6CisgICAg
RGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7
CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmpl
Y3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZXhwZWN0ZWQpCisgICAgICAgIDog
bV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZXhwZWN0ZWQoZXhwZWN0ZWQpCisgICAgewor
ICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9leHBlY3Rl
ZChJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAg
IEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4cGVj
dGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0ZWQpOworICAgIH0KKworICAgIHZvaWQg
YWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICBtX29iamVj
dC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fZXhw
ZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1f
ZXhwZWN0ZWQgPT0gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEluZmVycmVkVHlw
ZSo+OjpoYXNoKG1fb2JqZWN0KSArIG1fZXhwZWN0ZWQuaGFzaCgpICogNzsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQs
IGNvbnRleHQpLCAiIGZvciAiLCBSYXdQb2ludGVyKG1fb2JqZWN0KSk7CisgICAgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBkdW1wSW5D
b250ZXh0KG91dCwgbnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIEluZmVycmVkVHlw
ZSogbV9vYmplY3Q7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Cit9
OworCitzdHJ1Y3QgRGVzaXJlZEluZmVycmVkVHlwZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEs
IGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7CisgICAgdHlwZWRlZiBK
U0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDYgKzY1LDExIEBAIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cjoKICAgICB9CiB9CiAKK3ZvaWQgSW5mZXJyZWRUeXBlQWRhcHRvcjo6YWRkKENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIENvbW1vbkRhdGEmIGNv
bW1vbikKK3sKKyAgICBrZXkuYWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7
Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNp
cmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIApAQCAtOTMsNiArOTgs
MTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdAogICAgIG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCit2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKK3sKKyAg
ICBtX2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNo
cG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVj
dHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEwOCw2ICsxMTgsNyBAQCB2b2lkIERlc2lyZWRX
YXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChj
b2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5mZXJyZWRUeXBlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTE2LDcgKzEyNyw4IEBAIGJvb2wgRGVzaXJlZFdh
dGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0
aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQog
ICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2luZmVycmVkVHlw
ZXMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKQEAg
LTEyNyw2ICsxMzksNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQ
CiAgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFsdWVzOiAiLCBpbkNvbnRleHQobV9pbmZl
cnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIEJ1ZmZlciB2
aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsKICAgICBv
dXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250ZXh0KG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIg
ICAgSW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVHlwZXMsIGNvbnRleHQp
LCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1ZGUgIkRGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgpAQCAtOTEsNiArOTIsMTggQEAgc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFk
YXB0bwogICAgIH0KIH07CiAKK3N0cnVjdCBJbmZlcnJlZFR5cGVBZGFwdG9yIHsKKyAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYsIENvbW1v
bkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNTdGlsbFZh
bGlkKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBEdW1wQ29udGV4dCogY29udGV4
dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7Cisg
ICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1l
IEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBjbGFzcyBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNTks
NiArMTcyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRv
bid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGlj
aCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhl
ciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYpOworCisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxs
IHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKCksIHdoaWNoIGRvZXMK
KyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJl
Kik7CiAgICAgCkBAIC0xODYsNiArMjAzLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKICAgICB9CisgICAg
Ym9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAKICAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtMTk2LDYgKzIxNyw3IEBAIHBy
aXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5m
ZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRX
YXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRB
ZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+
IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8
RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJyZWRUeXBlQWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVz
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDkyLDYgKzEwOTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2so
CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG1faW5kZXhJbkJsb2NrLCBub2RlLT5v
cmlnaW4sIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAgICAgICAgICAgICBzcGVjdWxhdGVGb3JC
YXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4Nyw2ICs4ODcsNTAgQEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0
KiBiYXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIo
YmFzZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5m
ZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFzc2VydElz
UmVnaXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5m
ZXJyZWRUeXBlcy5nZXQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtX2luZmVycmVkVHlwZXMuZW5k
KCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIEluZmVycmVkVHlwZSogdHlw
ZU9iamVjdCA9IGtleS5zdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGtleS51aWQoKSk7Cisg
ICAgaWYgKCF0eXBlT2JqZWN0KSB7CisgICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJ
bmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAg
ICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURlc2NyaXB0b3IgPSB0eXBl
T2JqZWN0LT5kZXNjcmlwdG9yKCk7CisgICAgaWYgKCF0eXBlRGVzY3JpcHRvci5pc1N0aWxsVmFs
aWQoKSkgeworICAgICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpU
b3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorICAgIAorICAg
IG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCB0eXBlRGVzY3JpcHRvcik7CisKKyAgICBtX3BsYW4u
d2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHR5cGVPYmplY3QpOworICAgIGlmICh0eXBlRGVzY3Jp
cHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZURlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdh
dGNoaW5nIHRoaXMgZGVzaXJlZCBpbmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVj
dHVyZXMgbWF5CisgICAgLy8gcG9pbnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNl
LgorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0
eXBlT2JqZWN0LCB0eXBlRGVzY3JpcHRvcikpOworCisgICAgcmV0dXJuIHR5cGVEZXNjcmlwdG9y
OworfQorCitib29sIEdyYXBoOjp3YXRjaERlc2lyZWRUeXBlKGNvbnN0IERlc2lyZWRJbmZlcnJl
ZFR5cGUmIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkub2Jq
ZWN0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGtleS5leHBlY3RlZCgpLnN0
cnVjdHVyZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIG1f
cGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNo
TWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+Ojpp
dGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEw
NjEsNyArMTEwNSw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMK
IEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNl
LCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xv
YmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAgICAv
LyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2UgY291
bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8gY29u
c3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTEyMCwzNSBAQCBKU1ZhbHVl
IEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENvbnN0
YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwogfQog
CitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0Owor
ICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewor
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNldCgq
dGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAg
ICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFz
ZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNGaW5pdGUo
KSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShiYXNlLm1fc3RydWN0
dXJlLnNldCgpLCB1aWQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1cm4gQWJzdHJhY3RWYWx1
ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVW
YXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAgICAgLy8gVGhpcyBoYXMg
YW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZh
ciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyMSBAQCBwdWJsaWM6CiAgICAgLy8g
Q2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBh
dCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21wdXRlZCBieSB0
cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4K
ICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOwor
CisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxlIHRvIHByb3Zl
IHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KKyAgICBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYp
OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVjdHVyZSwgdWlk
KSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHko
CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKworICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29u
c3RhbnQgcHJvcGVydHkgaW5mZXJlbmNlIG9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRl
cml2ZSBhIGdvb2QgYWJzdHJhY3QKKyAgICAvLyB2YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nl
c3NlZCB3aXRoIHRoZSBnaXZlbiBhYnN0cmFjdCB2YWx1ZSBiYXNlLgorICAgIEFic3RyYWN0VmFs
dWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJl
Q2xvYmJlclN0YXRlKTsKICAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NG
b3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElu
bGluZUNhbGxGcmFtZSopOwpAQCAtODU2LDYgKzg3MSw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFw
PENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0
ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxC
eXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpT
T2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CisgICAgSGFzaE1hcDxQcm9w
ZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwog
ICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQ
b3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRpb25TZXQmIGlu
c2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSog
YmFzZU5vZGUsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9t
OgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBG
b3JjZU9TUkV4aXQsIG9yaWdpbik7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5k
ZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKEJvb2xlYW5Vc2UsIGJhc2VOb2RlKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9y
aWdpbiwgRWRnZShPdGhlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKEludDMyVXNlLCBiYXNl
Tm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVy
OgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBD
aGVjaywgb3JpZ2luLCBFZGdlKE51bWJlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShTdHJp
bmdVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmln
aW4sCisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJl
U2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIEVkZ2UoQ2VsbFVzZSwgYmFzZU5v
ZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAg
ICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1
Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShDZWxsT3JPdGhlclVzZSwgYmFzZU5vZGUpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9y
aWdpbiwgRWRnZShPYmplY3RVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKE9iamVj
dE9yT3RoZXJVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5m
ZXJyZWR0eXBlOjpUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0go
aW5zZXJ0aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlw
ZUNoZWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
ZmVycmVkVHlwZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJy
ZWRUeXBlQ2hlY2tfaAorI2RlZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIklu
ZmVycmVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIElu
c2VydHMgYSB0eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2
ZW4gaW5mZXJyZWQgdHlwZS4KK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5z
ZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9k
ZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5m
ZXJyZWRUeXBlQ2hlY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3Ry
dWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0
aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2Ug
bmVlZCB0byByZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywg
dGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQg
dHlwZSBpcworICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IGluZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtl
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gK
KyNkZWZpbmUgREZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3BlcnR5J3MgdHlw
ZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVuaXF1ZWRTdHJpbmdJbXBsKi4KKwor
Y2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVR5cGVLZXkoKQor
ICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV91aWQobnVsbHB0cikK
KyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVy
ZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKworICAgIFByb3BlcnR5VHlw
ZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3Qo
bnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVkVUlEKCkpCisgICAgeworICAgIH0KKwor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSAm
JiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dWlkOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0
cnVjdHVyZQorICAgICAgICAgICAgJiYgbV91aWQgPT0gb3RoZXIubV91aWQ7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0
cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSArIFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5n
SW1wbCo+OjpoYXNoKG1fdWlkKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV91aWQg
PT0gZGVsZXRlZFVJRCgpOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91
dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwg
bV91aWQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgVW5pcXVlZFN0cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0YXRpY19j
YXN0PGludHB0cl90PigxKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1
cmU7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworfTsKKworc3RydWN0IFByb3BlcnR5
VHlwZUtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlw
ZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFt
ZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
K3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+
IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVL
ZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAg
ICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAg
ICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2Fz
ZSBGaW5hbE9iamVjdFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIz
Miw2ICs1MjMyLDgwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSoK
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQUiwgR1BS
UmVnIHRlbXBHUFIpCit7CisgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7
CisgICAgCisgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFr
U3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFyeT4gc3Ry
dWN0dXJlOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSOworICAgICAgICAKKyAgICAgICAg
aWYgKHRlbXBHUFIgPT0gSW52YWxpZEdQUikgeworICAgICAgICAgICAgc3RydWN0dXJlID0gc3Rk
OjptYWtlX3VuaXF1ZTxHUFJUZW1wb3Jhcnk+KHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJl
R1BSID0gc3RydWN0dXJlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1
Y3R1cmVHUFIgPSB0ZW1wR1BSOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9u
ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0
dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBkb25lLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXIoSklUQ29tcGlsZXI6OkVxdWFs
LCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3Mg
PSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2Vs
bCh2YWx1ZVJlZ3MpOworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVl
UmVncywgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAg
bV9qaXQuYnJhbmNoSWZOb3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZt
X2ppdCk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IG5vUmVzdWx0KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoK
KyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRy
YW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2
MzYsNiArNTcxMCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2Ug
CiAgICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAg
IGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwor
ICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG9rID0gbV9qaXQuYnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3Bl
Y0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFu
ZC5qc1ZhbHVlUmVncygpLCB0ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlm
ICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYwMDYsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxs
VXNlOgogICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBj
YXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyMTUsNiArMjIxNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVs
bChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlVHlwZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2Rl
KiwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVj
a1N0cnVjdHVyZShOb2RlKik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAg
ICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1
bGF0ZUJvb2xlYW4oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZv
aWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
RWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1
bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTgxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkp
OyB9Ci0gICAgCisKICAgICAvLyBJbiBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkgd2FudCB0
byBkbyBpcyB2ZXJpZnkgd2hldGhlciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQsIGFuZAog
ICAgIC8vIGlmIG5vdCwgZW51bWVyYXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMg
b25seSBpbiBjYXNlcyB3aGVyZSB0aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBtZWFuaW5n
ZnVsbHkgc3BlY2lhbCwgbGlrZSBmb3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAyLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gbV9z
ZXQub25seVN0cnVjdHVyZSgpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0
b3IpOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw2ICs3OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBVc2UKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnByaW50KCJL
bm93bkNlbGwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6Cisg
ICAgICAgIG91dC5wcmludCgiQ2VsbE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkJvb2xl
YW5Vc2UsCiAgICAgQ2VsbFVzZSwKICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9yT3RoZXJV
c2UsCiAgICAgT2JqZWN0VXNlLAogICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2JqZWN0VXNl
LApAQCAtMTA4LDYgKzEwOSw4IEBAIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9y
KFVzZUsKICAgICBjYXNlIENlbGxVc2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAg
IHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICByZXR1
cm4gU3BlY0NlbGwgfCBTcGVjT3RoZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHJl
dHVybiBTcGVjT2JqZWN0OwogICAgIGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODk4MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxOCw2ICs0MTgsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShH
cmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAg
ICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxs
VXNlOgorICAgICAgICAgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAg
ICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMjYsMjEgKzIwMjYsNTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0S2luZCBl
eGl0S2luZDsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUg
c3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
SUQpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1
Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKSwKLSAgICAgICAgICAgIFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVj
dHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxf
c3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtp
bmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVy
ZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNh
c2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOwor
CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJl
KG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3Ry
dWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0
S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVj
dHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0
dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2Vs
bENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNO
b3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hl
Y2tDZWxsKCkKQEAgLTQwMjIsNiArNDA1Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9j
a3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworCisgICAgICAgICAgICBjaGVja0luZmVy
cmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CkBAIC01Njc0
LDYgKzU3MTEsMTM0IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBy
ZXN1bHRzKTsKICAgICB9CisKKyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2UgZWRnZSwg
TFZhbHVlIHZhbHVlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAg
eworICAgICAgICAvLyBUaGlzIGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlwZUNoZWNr
KCkgYmVjYXVzZSBpdCBpcyBjYWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlrZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAgICAgICAv
LworICAgICAgICAvLyBtYXkgYmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNhc2UgNDI6
CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7CisgICAg
ICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
ICAgICBjYXNlIDQzOgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwg
dHlwZTIpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFr
OworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0eXBlMSBh
bmQgdHlwZTIgYXJlIGRpZmZlcmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVhbiB0aGF0
IHRoZSBlZGdlIHdvdWxkIGJlCisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYgdHlwZTIs
IGluc3RlYWQgb2YgdHlwZTEgfCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodHlw
ZS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
bV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T3RoZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
SW50MzI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZS5ub2RlKCksIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLCBpc05vdE51bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdFN0cmlu
Zyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIGlmICghYWJzdHJh
Y3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHR5cGUuc3RydWN0dXJlKCkpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFs
dWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlw
ZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUo
Y2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworCisg
ICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRP
Zih0eXBlLnN0cnVjdHVyZSgpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
CisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisg
ICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5U
eXBlICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhl
cjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2VsbCBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1
cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwor
CisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RPYmplY3Qo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENl
bGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAg
ICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAg
ICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5TcGVjQ2Vs
bCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KICAgICAKICAgICBMVmFsdWUg
bG9hZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNzUxNCw2ICs3Njc5LDkgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdl
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJw
cmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTk0
LDYgKzc3NjIsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAgeworICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENl
bGxPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goaXNDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShp
c05vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzTm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIo
dmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAgICB2
b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgaWYgKCFt
X2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpAQCAtODEyNyw2ICs4MzExLDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmIChmYWlsQ29u
ZGl0aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAg
ICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0
YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KApAQCAtODEzNSw5ICs4MzIyLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
bnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhp
dC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAgCisKICAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CiAKKyAg
ICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKKyAgICAgICAg
ICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKwogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3MCBAQCBWZWN0b3I8Qnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFu
Y2hJZk5vdFR5cGUoCisgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBc3NlbWJseUhl
bHBlcnM6Okp1bXBMaXN0IHJlc3VsdDsKKworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkp
IHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICByZXN1bHQuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xl
YW46CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RCb29sZWFuKHJlZ3MsIHRlbXBH
UFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPdGhlcihyZWdzLCB0ZW1wR1BSKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVncykpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3ROdW1iZXIocmVncykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdzLnBheWxv
YWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChy
ZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKHJlZ3MucGF5bG9h
ZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAg
IEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoU3RydWN0dXJlKHJlZ3MucGF5bG9hZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7
CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChy
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJl
Z3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdz
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTihG
UFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IGJyYW5jaERv
dWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MTks
NiArNzE5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgSnVtcExpc3QgYnJhbmNo
SWZOb3RUeXBlKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVt
cCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhh
bmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICszNzcsOCBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICYmIE1hY3JvQXNz
ZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2Up
Ci0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKSB7CisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LmltcGwoKSkpIHsKIAogICAgICAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2Vs
ZkFjY2VzcygKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MzMsNiArNjMzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9p
ZAogICAgICAgICBwY1s1XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBvZmZzZXQKICAgICAgICAg
cGNbNl0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gbmV3IHN0cnVjdHVyZQogICAgICAgICBwY1s3
XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBzdHJ1Y3R1cmUgY2hhaW4KKyAgICAgICAgcGNbOF0u
dS5wdXRCeUlkRmxhZ3MgJj0gUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2s7CiAgICAgICAgIAog
ICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTY2MCwxMiAr
NjYxLDE2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNldCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHw9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0
QnlJZEZsYWdzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQ
cm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAg
ICAgICBwY1s0XS51LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgICAgICAgICAg
ICAgIHBjWzVdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICAg
ICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgfD0KKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyNjUsMTQgKzEyNjUsODcgQEAgX2xsaW50
X29wX3B1dF9ieV9pZDoKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxs
KHQzLCB0MCwgLm9wUHV0QnlJZFNsb3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlE
W3QwXSwgdDIKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmluZXEgdDIs
IHQxLCAub3BQdXRCeUlkU2xvdworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MikKKyAg
ICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAog
ICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJyZW50IHN0
cnVjdHVyZSBJRAorICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+
IG9iamVjdCBiYXNlCiAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig4
LCB0MSkKKworICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVj
dCBiYXNlCisgICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1cnJlbnQg
c3RydWN0dXJlIElECisgICAgIyB0MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56IHQxLCBQ
dXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIKKworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlw
ZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTWFzaywgdDEKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9w
UHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhl
IGZvbGxvd2luZzogU3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAgIGJwbHQg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVj
a0xlc3NUaGFuT2JqZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3Ro
ZXIgb3IgVG9wLgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRC
eUlkRG9uZUNoZWNraW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3Ro
ZXIuCisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorLm9w
UHV0QnlJZFR5cGVDaGVja090aGVyOgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDMKKyAg
ICBicWVxIHQzLCBWYWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGpt
cCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90
aGVyOgorICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0cW56IHQz
LCB0YWdNYXNrLCAub3BQdXRCeUlkU2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0NlbGw6Om1f
dHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGpt
cCAub3BQdXRCeUlkU2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBiYmFlcSBK
U0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBl
cworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5T
dHJpbmc6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVh
biwgT3RoZXIsIEludDMyLCBOdW1iZXIKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZUludDMyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBXZSBhcmUg
ZWl0aGVyIEludDMyIG9yIE51bWJlci4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU51bWJlciwgLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcgorCisgICAgYnFhZXEgdDMsIHRhZ1R5
cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlk
U2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0YWdUeXBl
TnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNs
b3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25l
IG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBuZXEgdDEs
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9y
T3RoZXIKKyAgICB4b3JxIFZhbHVlRmFsc2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5
SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlk
VHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
KworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJ0
cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlLCAub3BQdXRCeUlk
VHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZQorICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQ
dXRCeUlkVHlwZUNoZWNrT3RoZXIKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1
Y3R1cmU6CisgICAgdXJzaGlmdHAgMywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBidGl6IHQxLCAu
b3BQdXRCeUlkTm90VHJhbnNpdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTg5ODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBMb3dlc3RUYWcg
PSBEZWxldGVkVmFsdWVUYWcKIGVuZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVzdCBi
ZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0IFB1dEJ5SWRQ
cmltYXJ5VHlwZU1hc2sgPSAweDYKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9
IDB4MAorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4Mgor
Y29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQK
K2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1dEJ5SWRTZWNv
bmRhcnlUeXBlQm90dG9tID0gMHgwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4g
PSAweDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitjb25zdCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVO
dW1iZXIgPSAweDIwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgKK2Nv
bnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVU
b3AgPSAweDQwCisKIGNvbnN0IENhbGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQgb3IgQVJN
NjQgb3IgQ19MT09QCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6
OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5m
ZXJyZWRUeXBlKSB9OworCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZTo6Y3JlYXRlKFZNJiB2
bSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZSh2bSk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZSogaW5m
ZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisgICAgaW5mZXJy
ZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsKK30KKworU3RydWN0dXJlKiBJ
bmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRU
eXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisKKyAgICBp
ZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRp
dGlvbmFsRmluYWxpemVyKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUuZ2V0KCkpOworfQorCitJ
bmZlcnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdz
IGZsYWdzKQoreworICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7
CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6CisgICAgICAgIHN3aXRjaCAo
ZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAgICAgY2FzZSBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUJvdHRvbToKKyAgICAgICAgICAgIHJldHVybiBCb3R0b207CisgICAgICAg
IGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEJv
b2xlYW47CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjoKKyAgICAgICAg
ICAgIHJldHVybiBPdGhlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMy
OgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlTnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICAgICAgY2FzZSBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7Cisg
ICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3Q6CisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0OworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhl
cjoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90aGVyOworICAgICAgICBjYXNlIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlVG9wOgorICAgICAgICAgICAgcmV0dXJuIFRvcDsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gQm90dG9tOworICAgICAgICB9CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVy
ZTsKKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IEJvdHRvbTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
LmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIE90aGVyOworICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIo
KSkKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAg
ICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5p
c1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgaWYgKGNlbGwt
PmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
RGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUb3A7
Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIEtpbmQga2luZCA9
IGtpbmRGb3JGbGFncyhmbGFncyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgaWYg
KGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSk7CisgICAgZWxzZQorICAg
ICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIHJldHVybiBEZXNjcmlwdG9yKGtpbmQsIHN0
cnVjdHVyZSk7Cit9CisKK1B1dEJ5SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnB1
dEJ5SWRGbGFncygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJv
dHRvbToKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlQm90dG9tOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgcmV0dXJu
IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVh
bjsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vj
b25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjsKKyAgICBjYXNlIEludDMyOgorICAg
ICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFy
eVR5cGVJbnQzMjsKKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmlt
YXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOworICAgIGNhc2Ug
U3RyaW5nOgorICAgICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0
QnlJZFNlY29uZGFyeVR5cGVTdHJpbmc7CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHJldHVy
biBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVj
dDsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFy
eVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXI7CisgICAg
Y2FzZSBUb3A6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVRvcDsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Cisg
ICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlIHwgZW5j
b2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpOworICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgp
KTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
UHV0QnlJZE5vbmU7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjptZXJnZShj
b25zdCBEZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9t
OgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29s
ZWFuOgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIG1fa2luZCA9IE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIE9iamVjdDoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgSW50MzI6CisgICAgICAg
IHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAg
ICAgbV9raW5kID0gTnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2Ug
T2JqZWN0OgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAq
dGhpcyA9IG90aGVyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90
aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAg
ICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0
cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAqdGhpcyA9IE9i
amVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0Ogor
ICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9i
amVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKG90aGVy
Lm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAg
IG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNl
IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAg
ICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVt
b3ZlU3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAqdGhpcyA9IE9i
amVjdE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm47CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMo
Y29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRvciBtZXJnZWQg
PSAqdGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAqdGhpcyA9PSBt
ZXJnZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50
KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJl
ZFR5cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJlLmdl
dCgpKQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5m
ZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6Omlz
U3RpbGxWYWxpZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2Ny
aXB0b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9wKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9
PSBleHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZChjb25zdCBE
ZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIHJldHVybiBpc1N0aWxsVmFsaWQobG9ja2VyLCBleHBlY3RlZCk7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7CisKKyAgICBtX3dhdGNocG9pbnRT
ZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2lu
dChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdhdGNocG9pbnQpOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIGRlc2NyaXB0b3IoKSk7Cit9CisKK2Jv
b2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgRGVzY3Jp
cHRvciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3JpcHRvciBvdGhlclR5
cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5cGUubWVyZ2Uob3Ro
ZXJUeXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0gbXlUeXBlKTsgLy8g
VGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KKwor
ICAgIHNldChsb2NrZXIsIHZtLCBteVR5cGUpOworCisgICAgcmV0dXJuIGtpbmQobG9ja2VyKSAh
PSBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0pCit7Cisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2VyLCB2
bSwgVG9wKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQoreworICAg
IC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2Nr
LiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAorICAgIC8vIGNv
dWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0
aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIg
aW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUg
dGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3Jl
IG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBh
bnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1vcmUg
Z2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iu
c3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUgbmV3IGRlc2Ny
aXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUgYmVj
YXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgp
ICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCghZGVzY3JpcHRv
cihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKwor
ICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYgYW55
b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCisgICAgLy8g
YW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQgd2Ug
ZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dhdGNocG9pbnRT
ZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90IGhh
dmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVhZHkg
YmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gSXNJ
bnZhbGlkYXRlZCk7CisKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZlIHRo
aW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhpcyB0
eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0IHRo
aXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5ncyBm
b3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAgICAg
ICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoIkluZmVycmVkIHR5cGUgY2hhbmdlZCIpOworICAg
IH0KKworICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3
ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkp
CisgICAgICAgIG1fc3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgIC8vIEFkZCBhIG5ldyBJbmZl
cnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgorICAgIGlmIChuZXdEZXNj
cmlwdG9yLnN0cnVjdHVyZSgpKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJl
LgorICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1
Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odGhpcywgbmV3RGVz
Y3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChtX3N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KKyAg
ICBtX2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2VydCB0aGF0IHdl
IGRpZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlw
dG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAg
Vk0mIHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX3BhcmVudC0+bV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlwdG9yIG5ld0Rl
c2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRvci5yZW1vdmVT
dHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcik7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJ
bnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikKK3sKKyAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5m
ZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUq
PigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VU
T0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fd2F0Y2hwb2ludCkpOworCisgICAgaW5mZXJyZWRTdHJ1
Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6OkluZmVycmVkU3RydWN0dXJlRmlubGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
K3sKKyAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBi
aXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fZmlu
YWxpemVyKSk7CisKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcChpbmZlcnJlZFN0cnVjdHVyZS0+
bV9wYXJlbnQpLT52bSgpOworCisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGluZmVycmVkU3Ry
dWN0dXJlLT5tX3BhcmVudCkpOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQoaW5mZXJy
ZWRTdHJ1Y3R1cmUtPm1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgaW5mZXJyZWRTdHJ1Y3R1
cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6
OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVyZShJbmZlcnJlZFR5cGUqIHBhcmVu
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgLCBt
X3N0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVHlwZTo6S2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Cisg
ICAgICAgIG91dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIG91dC5w
cmludCgiT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJ
bnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAg
IG91dC5wcmludCgiU3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRo
U3RydWN0dXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50
KCJPYmplY3RPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6VG9wOgorICAgICAgICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmZlcnJlZFR5cGVf
aAorI2RlZmluZSBJbmZlcnJlZFR5cGVfaAorCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2su
aCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZlcmVu
Y2Ugb2YgdGhlIHR5cGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgorCitjbGFzcyBJbmZlcnJlZFR5
cGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBC
YXNlOworCisgICAgc3RhdGljIEluZmVycmVkVHlwZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJF
X0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAorICAg
ICAgICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAgIE51
bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAg
ICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAg
ICBPYmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisgICAgS2luZCBraW5kRm9y
RmxhZ3MoUHV0QnlJZEZsYWdzKTsKKyAgICAKKyAgICBib29sIGhhc1N0cnVjdHVyZShLaW5kIGtp
bmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIERlc2NyaXB0b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQo
Qm90dG9tKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBudWxscHRyKQorICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAg
ICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMg
RGVzY3JpcHRvciBmb3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2tpbmQgPT0gQm90dG9tICYmICFtX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKKyAgICAgICAgUHV0QnlJ
ZEZsYWdzIHB1dEJ5SWRGbGFncygpIGNvbnN0OworCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpbmNsdWRlc1ZhbHVlKEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgICAgICAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOworICAgICAgICAgICAgY2FzZSBPdGhlcjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICAgICAg
ICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsK
KyAgICAgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5p
c051bWJlcigpOworICAgICAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmlzU3RyaW5nKCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlzQ2VsbCgpICYm
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7CisgICAgICAgICAg
ICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNPYmplY3QoKTsK
KyAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAg
ICAgY2FzZSBUb3A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisg
ICAgICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0
dXJlKSBeIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOworICAgICAgICB9CisgICAgCisg
ICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgRGVzY3JpcHRvciYpOworICAgICAgICB2b2lkIHJlbW92
ZVN0cnVjdHVyZSgpOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRlc2NyaXB0
b3IgaXMgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIG90aGVyIG9uZS4KKyAgICAgICAgYm9vbCBzdWJz
dW1lcyhjb25zdCBEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBLaW5kIG1fa2lu
ZDsKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAgQ29uY3Vy
cmVudEpJVExvY2smIGxvY2soKSBjb25zdCB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIERlc2Ny
aXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUo
KSA6IG51bGxwdHIpOworICAgIH0KKyAgICAKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVz
Y3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICB9CisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgfQorICAgIAorICAgIEtp
bmQga2luZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJu
IGRlc2NyaXB0b3IobG9ja2VyKS5raW5kKCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZShj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0
b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKTsgfQorCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZCA9PSBUb3A7IH0KKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50
IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYg
dm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNj
cmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNj
cmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRE
ZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNs
b3codm0sIHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5
cGUgaXJyZWxldmFudC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mIHZtKQorICAgIHsKKyAgICAgICAg
aWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1ha2VUb3BTbG93KHZt
KTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1ha2VzIHNl
bnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3IuIE5vdGUg
dGhhdAorICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3AuCisgICAg
Ym9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERl
c2NyaXB0b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAK
KyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2Vy
LCBXYXRjaHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluZmVy
cmVkVHlwZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAgIGJvb2wgd2lsbFN0b3Jl
VmFsdWVTbG93KFZNJiwgSlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYpOworICAg
IHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIERlc2NyaXB0b3IpOwor
ICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRM
b2NrIG1fbG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9OworCisgICAgY2xh
c3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikg
b3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVy
IDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
SW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAg
Y2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlKEluZmVycmVkVHlwZSog
cGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVudDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IG1f
d2F0Y2hwb2ludDsKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgbV9maW5hbGl6
ZXI7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9z
dHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRy
YW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQor
ICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGlu
aXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8g
dGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRo
YXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5
cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6
OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkp
IEluZmVycmVkVHlwZVRhYmxlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFi
bGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVk
VHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisK
K1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJy
ZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nh
c3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fdGFibGUpIHsK
KyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRy
eS52YWx1ZS5jbGVhcigpOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVU
YWJsZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKKyAgICBp
ZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcHJ1bmUgaW52YWxp
ZGF0ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNSZWxldmFudCgpKSB7CisgICAg
ICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZl
cnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZ2V0KGxvY2tlciwgdWlk
KTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIGdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwor
fQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1ZSgKKyAgICBWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFN0b3JlZFByb3BlcnR5
QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0
IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICAKKyAgICBp
ZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFR5cGVUYWJsZTo6aXRlcmF0b3IgaXRl
ciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoaXRlciA9PSBtX3Rh
YmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
QWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKyAgICAgICAgCisgICAgICAgIGlmIChpdGVyLT52
YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFR5cGVUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7
CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJl
c3VsdCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlw
ZT4oKSk7CisgICAgfQorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBJbmZl
cnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5zZXQodm0sIHRoaXMsIGluZmVycmVkVHlwZSk7CisgICAgfSBlbHNlIGlmICghcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjptYWtlVG9wKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQor
eworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5
IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIGlmIChhZ2UgPT0gT2xkUHJv
cGVydHkpIHsKKyAgICAgICAgVHlwZVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5k
KHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0
ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4g
dG9wLgorCisgICAgICAgIGl0ZXItPnZhbHVlLT5tYWtlVG9wKCk7CisgICAgICAgIGl0ZXItPnZh
bHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBUeXBlVGFibGU6OkFkZFJlc3VsdCByZXN1
bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+
KCkpOworICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1ha2VUb3AoKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGVUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBl
VGFibGVfaAorI2RlZmluZSBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKyNpbmNsdWRlICJJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21l
IHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUg
U3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8gbWFu
YWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRo
aW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMg
aXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCisv
LyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFy
ZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFzIGJl
aW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMgd2lsbCBoYXBw
aWx5IGNvbmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KKy8vIGRpZmZlcmVudCBz
dHJ1Y3R1cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pvaW50IHNldHMg
b2Ygb2JqZWN0cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIElu
ZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIENv
bmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisgICAgLy8gR2V0
IHRoZSBjdXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVsbHB0ciBmb3IgYm90aCBUb3Ag
YW5kIEJvdHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCisgICAgLy8gb3duaW5nIFN0cnVj
dHVyZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5LgorICAgIEluZmVycmVkVHlwZSog
Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAg
IEluZmVycmVkVHlwZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBl
KiBnZXQoUHJvcGVydHlOYW1lKTsKKworICAgIGVudW0gU3RvcmVkUHJvcGVydHlBZ2UgeworICAg
ICAgICBOZXdQcm9wZXJ0eSwKKyAgICAgICAgT2xkUHJvcGVydHkKKyAgICB9OworICAgIAorICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5IGlz
IHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QKKyAgICAvLyByZWxldmFu
dCBpZiBpdCdzIFRvcC4gTm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5hbGx5IHBydW5l
IFRvcCBlbnRyaWVzLgorICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworICAgIC8vIEludmFsaWRhdGVzIHRoZSB0
eXBlIGZvciB0aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9yZSBpbiBhIHJl
ZmxlY3RpdmUgY29udGV4dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0eU5hbWUsIFN0
b3JlZFByb3BlcnR5QWdlKTsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGVUYWJsZShWTSYp
OworICAgIH5JbmZlcnJlZFR5cGVUYWJsZSgpOworCisgICAgLy8gQm90dG9tOiBhYnNlbmNlIGZy
b20gdGFibGUuCisgICAgLy8gVG9wOiBudWxsIHZhbHVlIGluIHRhYmxlLCAhdmFsdWUtPmlzUmVs
ZXZhbnQoKSwgb3IgYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vCisgICAgLy8gV2Uga25vdyBo
b3cgdG8gZGV0ZXJtaW5lIGlmIGFic2VuY2UgZnJvbSB0aGUgdGFibGUgaXMgYm90dG9tIG9yIHRv
cCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpcyBwcmVzZW50IGlu
IHRoZSBvd25pbmcgc3RydWN0dXJlLiBIZW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBzdHJ1Y3R1cmUs
IGFic2VuY2UgbWF5IGhhdmUKKyAgICAvLyBkaWZmZXJlbnQgbWVhbmluZ3MuIFRoZSB3YXkgdGhh
dCB0aGlzIGNsYXNzIGRldGVybWluZXMgaWYgdGhlIG93bmluZyBzdHJ1Y3R1cmUga25vd3Mgb2Yg
dGhlIHByb3BlcnR5CisgICAgLy8gaXMgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYWN0
aW9uczogcmVwbGFjZSBvciB0cmFuc2l0aW9uLiBJZiB3ZSdyZSBhZGRpbmcgYSBuZXcgcHJvcGVy
dHkKKyAgICAvLyAodHJhbnNpdGlvbiksIHRoZW4gYWJzZW5jZSBtZWFucyBib3R0b20uIElmIHdl
J3JlIHN0b3JpbmcgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkgKHJlcGxhY2UsIHRoZW4KKyAgICAv
LyBhYnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUgdG8gd2F0Y2gg
b3V0IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCisgICAgLy8gUzIs
IHNoYXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9mIHRoZW0gaW5p
dGlhbGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5CisgICAgLy8gd2FudCB0byBhZGQg
UCB3aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0aCBhIHR5cGUu
IElmIFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAgIC8vIHRvIGluZGljYXRlIFRvcCwg
dGhlbiBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFuZCB3b3VsZCBl
bmQgdXAgY3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50cnkgaW4gdGhlIHRhYmxlLiBUaGVu
IFMxIHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1c2UgUzIncyB0
eXBlLiBDbGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2ggY29uZnVzaW9u
IGJ5IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVudHJ5LiBIZW5j
ZSwKKyAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8gcGxheSBmb3Ig
cHJvcGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdhcworICAgIC8v
IGNyZWF0ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4s
IFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0
czxVbmlxdWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7CisgICAgCisgICAgVGFibGVUeXBlIG1f
dGFibGU7CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBsb2NrIHdoZW4gd2UncmUgZG9pbmcg
bW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9yIHJlYWRzIG9uIHRoZSBjb21waWxl
cgorICAgIC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVhZCBpcyBub3QgYWxsb3dlZCB0byBk
byBtb2RpZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlVGFibGVfaAorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgIEFT
U0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKICAgICAgICAg
dW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsK
ICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBAIC0xMjI3LDI5ICsxMjI5
LDQwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkp
IHsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAgICAgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgaWYgKG5ld1N0cnVjdHVyZSkgeworICAg
ICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAg
ICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAg
ICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewotICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3Vy
cmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBp
ZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
eworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3Vy
cmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHVuc2ln
bmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICBib29sIGhhc0luZmVycmVkVHlw
ZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50
QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRy
aWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
c3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKGhhc0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3Jl
VmFsdWVGb3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICB9
CisKICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAKQEAgLTEyNjgsMTYgKzEyODEsMTkg
QEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIC8vIHdlIHdh
bnQuCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJy
ZWRXYXRjaHBvaW50RmlyZTsKICAgICAKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbigKKyAgICAgICAg
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29u
dGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlLT53aWxs
U3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAgIAogICAg
IHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7CisgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5l
Y2Vzc2FyeSh2bSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2
YWx1ZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChh
dHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFk
T25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRP
bmx5UHJvcGVydGllcygpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzM1LDggKzEzNTEs
MTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKHN0cnVjdHVy
ZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVyZmx5
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkp
OwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKKyAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZh
bHNlOworICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTEgKzM1MCwx
NSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQog
ICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwog
ICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVu
dHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5t
X29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYg
KHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMu
Z2V0KCkpKQorICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAg
ICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTQ2NCw2ICs0Njgs
NyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNp
dGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0
ID0gc3RydWN0dXJlLT5tX29mZnNldDsKKyAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRh
YmxlLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlw
ZVRhYmxlLmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtNDc5LDYgKzQ4NCwyNCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKKyAgICAvLyBO
T1RFOiBUaGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMgd2h5IHRoaXMgZ29lcyBkaXJlY3RseSB0
byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IHJhdGhlciB0aGFuCisgICAgLy8gY2FjaGluZyB0aGUg
cmVtb3ZhbC4gV2UgY2FuIGZpeCBhbGwgb2YgdGhlc2UgdGhpbmdzLCBidXQgd2UgbXVzdCByZW1l
bWJlciB0byBkbyBzbywgaWYgd2UgZXZlciB0cnkKKyAgICAvLyB0byBvcHRpbWl6ZSB0aGlzIGNh
c2UuCisgICAgLy8KKyAgICAvLyAtIENhY2hlZCB0cmFuc2l0aW9ucyB1c3VhbGx5IHN0ZWFsIHRo
ZSBwcm9wZXJ0eSB0YWJsZSwgYW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMgcG9zc2libGUgYmVjYXVz
ZSB0aGV5CisgICAgLy8gICBjYW4ganVzdCByZWJ1aWxkIHRoZSB0YWJsZSBieSBsb29raW5nIGF0
IHBhc3QgdHJhbnNpdGlvbnMuIFRoYXQgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHRhYmxlIG9ubHkK
KyAgICAvLyAgIGdyZXcgYW5kIG5ldmVyIHNocmFuay4gVG8gc3VwcG9ydCByZW1vdmFscywgd2Un
ZCBoYXZlIHRvIGNoYW5nZSB0aGUgcHJvcGVydHkgdGFibGUgbWF0ZXJpYWxpemF0aW9uCisgICAg
Ly8gICBjb2RlIHRvIGhhbmRsZSBkZWxldGlvbnMuIEFsc28sIHdlIGhhdmUgbG9naWMgdG8gZ2V0
IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgb24gYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vICAgbGFj
a3MgYSBwcm9wZXJ0eSB0YWJsZSBieSBqdXN0IGxvb2tpbmcgYmFjayB0aHJvdWdoIHRoZSBzZXQg
b2YgdHJhbnNpdGlvbnMgc2luY2UgdGhlIGxhc3QKKyAgICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhh
ZCBhIHBpbm5lZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdl
ZCB0byBoYW5kbGUgY2FjaGVkCisgICAgLy8gICByZW1vdmFscy4KKyAgICAvLworICAgIC8vIC0g
SW5mZXJyZWRUeXBlVGFibGUgYXNzdW1lcyB0aGF0IHJlbW92YWwgaGFzIG5ldmVyIGhhcHBlbmVk
LiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSBpZiB3ZSBjb3VsZAorICAgIC8vICAgcmVtb3ZlIGEg
cHJvcGVydHkgYW5kIHRoZW4gcmUtYWRkIGl0IGxhdGVyLCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFu
cyB0b3AiIG9wdGltaXphdGlvbiB3b3VsZG4ndAorICAgIC8vICAgd29yayBhbnltb3JlLCB1bmxl
c3MgcmVtb3ZhbCBhbHNvIGVpdGhlciBwb2lzb25lZCB0eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcg
c29tZXRoaW5nIGVxdWl2YWxlbnQgdG8KKyAgICAvLyAgIGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBi
eSBzdHJvbmdseSBtYXJraW5nIHRoZSBlbnRyeSBhcyBUb3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBp
cyBub3QgYWJzZW50LCBidXQKKyAgICAvLyAgIGluc3RlYWQsIGhhcyBhIG51bGwgZW50cnkuCisg
ICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwog
CiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtODQxLDYgKzg2NCw0MyBAQCB2b2lkIFN0cnVjdHVy
ZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3Bl
cnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCisg
ICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZE9wdGltaXplLAorICAgIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFn
ZSBhZ2UpCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKKyAgICBBU1NFUlQoIWhhZEJl
ZW5EaWN0aW9uYXJ5KCkpOworCisgICAgLy8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxl
IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdl
IGhhdmUgYWxyZWFkeQorICAgIC8vIGdyYWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5
IG1hcC4KKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxl
LmdldCgpOworICAgIGlmICghdGFibGUpIHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVU
YWJsZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlQmFycmllcigpOworICAg
ICAgICBtX2luZmVycmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKwor
ICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNh
bGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29u
ZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhh
dmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisg
ICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5
TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7
CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAg
ZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYWdlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Ao
dm0sIHByb3BlcnR5TmFtZSwgYWdlKTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9
IGZhbHNlOworICAgIH0KK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVy
dHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0x
MDU4LDYgKzExMTgsOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNh
ZmUpOwogICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQog
ICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAog
Ym9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5o
IgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxl
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTVHlwZS5oIgpAQCAtODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5
IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8v
IFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5
cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hl
Y2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVu
dHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBl
KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9w
ZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZz
ZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVy
cmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09
IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0
IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3Bl
cnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJv
b2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJu
YWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhv
bGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVl
IHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ4
MSw2ICs0ODYsNDAgQEAgcHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNo
aW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wg
aGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVy
cmVkVHlwZVRhYmxlOworICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9y
KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBl
VGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0YWJsZS0+Z2V0KHVpZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiBy
ZXN1bHQgPSBpbmZlcnJlZFR5cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQt
PmRlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisg
ICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFy
eSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6TmV3UHJvcGVydHkp
OworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNl
KAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFi
bGU6Ok9sZFByb3BlcnR5KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBl
PiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYg
dGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVz
ZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02MzIsNiArNjcxLDkgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIHZvaWQg
d2lsbFN0b3JlVmFsdWVTbG93KAorICAgICAgICBWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
Ym9vbCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlKTsKKwogICAgIHN0YXRp
YyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0
IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAt
NjU1LDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91
Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90
aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVy
cmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNp
dGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9m
ZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnN0b3JlZFByb3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNs
YXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsK
LSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUp
OwotICAgIGlmICghcHJvcGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
Ci0KLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9w
ZXJ0eU5hbWUudWlkKCkpOwotICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZh
bGlkT2Zmc2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJl
ZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJ
bmZlcnJlZFR5cGUpOwogfQogICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBh
dHRyaWJ1dGVzKQogeworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxX
QVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJl
ZFR5cGUpCit7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3
IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0
dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7
CisgICAgaGFzSW5mZXJyZWRUeXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1
cm4gZW50cnktPm9mZnNldDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNy
ZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQVBJ
VmFsdWVXcmFwcGVyLmgiCkBAIC0yNDEsNiArMjQyLDggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CisgICAgaW5mZXJyZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJyZWRUeXBl
VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgZXhjZXB0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZURlZmVycmVk
U3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiw4IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdl
YWtNYXBEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVT
dHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJlOwor
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gZXhjZXB0aW9uU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21p
c2VEZWZlcnJlZFN0cnVjdHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261240</attachid>
            <date>2015-09-15 14:44:44 -0700</date>
            <delta_ts>2015-09-15 15:04:55 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>163155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NDUsNiArNzQ3LDEwIEBACiAJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07
CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZC
M0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZG
Qzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMx
ODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5
MjMsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNz
Lmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYg
LyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0
aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjU3Myw2ICsyNTgxLDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9y
cGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
QjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
Qzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBv
aW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0
NjYzLDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5o
ICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8s
Ci0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZF
MUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZD
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZE
MDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAw
MDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2
MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00Njg2LDYgKzQ2OTgsMTAgQEAKIAkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8s
CiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBG
MEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3
NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEw
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4
MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFB
RDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVF
QzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3
NTIsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0
aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8s
CiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3
RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDQzLDkgKzUwNTks
OSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJ
CQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAv
KiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICov
LAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJ
RkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApAQCAtNTE5Nyw2ICs1MjEzLDcgQEAK
IAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkw
RjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywK
IAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmgg
Ki8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJl
ZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MzQ0LDYgKzUzNjEsNyBAQAogCQkJCTBGM0Uw
MUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYy
QjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCAqLywK
IAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24u
aCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICovLAog
CQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgKi8sCkBAIC01OTM0LDYgKzU5NTIsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJDQjI1MUE2
Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDQ3LDYg
KzYwNjYsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMyLDYgKzYzNTIsNyBAQAogCQkJCTBGNkIxQ0M2
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBl
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3
OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1
Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5Nyw2ICs2
NTE4LDcgQEAKIAkJCQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQzOSw2ICs3NDYxLDcgQEAKIAkJCQkxNDI4
MDgyRTEwN0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNGMTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVk
U3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4NTMsNiArNzg3Niw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4
NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUI2QTc0RDE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg2LDYgKzY4Niw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2Vu
ZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQudWlkKCkpKSB7
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LnVpZCgpKSkgeworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2gu
YXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0IEBAIG5hbWVzcGFjZSBX
VEYgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0
cmluZ091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQ
dXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChjb21tYSwgIklzRGlyZWN0
Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7CiAKLSAgICBDU3RyaW5n
IHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJp
bnQoc3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6
a2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOworICAgIGlm
IChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMg
KzI2LDcwIEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5lIFB1dEJ5SWRGbGFnc19o
CiAKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGludHB0cl90IHsKICAgICBQ
dXRCeUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQorCisgICAgLy8gVGhpcyBm
bGFnIGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0LiBUaGF0IG1lYW5zIHRo
YXQgd2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBjaGVja2luZyBpZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEs
CisgICAgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCisKKyAgICAvLyBOT1RFOiBU
aGUgdmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20uCisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJy
ZWQgdHlwZSBpbnZvbHZlcyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFu
ZCB0aGVuCisgICAgLy8gdXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRo
ZSBzZWNvbmRhcnkgbWFzazoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlU
eXBlTWFzaykgeworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAg
IC8vICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAg
Ly8gICAgIC4uLgorICAgIC8vICAgICB9CisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAvLyBjYXNlIFB1dEJ5
SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIC8vICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKKyAgICAvLyAg
ICAgYnJlYWs7CisgICAgLy8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCisg
ICAgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRo
ZSBzZWNvbmRhcnkgdHlwZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0
dXJlIElELgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
ID0gMHg0LCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorCisgICAgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRv
bSA9IDB4MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCisgICAgUHV0
QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJ
bnQzMiA9IDB4MTgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAorICAg
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdCA9IDB4MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
ID0gMHgzOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKIH07CiAKK2lubGlu
ZSBQdXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJlSUQgaWQpCit7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKSA8PCAzKTsKKyNlbHNlCisgICAgUHV0QnlJZEZsYWdz
IHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKTsKKyAgICBBU1NFUlQoIShy
ZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbmRpZgorfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb2RlU3RydWN0dXJlSUQoUHV0QnlJ
ZEZsYWdzIGZsYWdzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFN0cnVjdHVyZUlEPihmbGFncyA+PiAzKTsKKyNlbHNlCisgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spOworI2Vu
ZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3Ry
dWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQp
KTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CkBAIC0xMDMsNyArMTAzLDggQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
KyAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBu
ZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCkBAIC0xNjIsNyArMTYzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3Ap
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KQEAgLTE5Myw3ICsxOTQsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yMDYsNyArMjA4LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQs
IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZl
cnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzI5LDggKzMzMiwxMCBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28s
IGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0KKyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlw
dG9yRm9yKHVpZCkpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJp
YW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0zNTYsMTMgKzM2MSwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAg
ICAKICAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3Ry
dWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJl
LCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1
bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJh
bnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICgh
ZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBtX3JlcXVpcmVkVHlwZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVs
c2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9w
ZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYg
Kzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
IHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC04NSw2ICs5MCw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdU
Rjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5m
ZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwx
MiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYg
KG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9yZXF1aXJlZFR5cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFj
ZToKKyAgICBjYXNlIFJlcGxhY2U6IHsKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsK
ICAgICAgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2Fz
ZSBSZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIs
IGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgp
LCAiPiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCks
CisgICAgICAgICAgICAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
VHJhbnNpdGlvbjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9u
OiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAg
ICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsi
LAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJl
ZFR5cGUoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1
YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1
dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1
cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlP
ZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFBy
b3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2
ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9
CiAKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHBy
aXZhdGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJQYXJz
ZXJNb2Rlcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlJlZ0V4cC5o
IgogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaCIKQEAgLTk4LDEyICs5NywxMCBAQCBzdHJ1Y3QgVW5saW5rZWRJbnN0cnVj
dGlvbiB7CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQogICAg
IFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2Rl
OyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBv
cGVyYW5kOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsg
dS5wdXRCeUlkRmxhZ3MgPSBmbGFnczsgfQogICAgIHVuaW9uIHsKICAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
OwotICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzOwogICAgIH0gdTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiwzOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICB0b3VjaChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwogICAgIH0KLSAgICAKKworICAg
IC8vIE5vdGUgdGhhdCBmb3IgYW55IHdhdGNocG9pbnQgdGhhdCBpcyB2aXNpYmxlIGZyb20gdGhl
IERGRywgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIHdyaXRlIGNvZGUgbGlrZToKKyAgICAvLwor
ICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgpCisg
ICAgLy8KKyAgICAvLyBDb25jdXJyZW50bHkgdG8gdGhpcywgdGhlIERGRyBjb3VsZCBkbzoKKyAg
ICAvLworICAgIC8vIGlmICh3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBwZXJmb3JtIG9w
dGltaXphdGlvbnM7CisgICAgLy8gaWYgKCF3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBy
ZXRyeSBjb21waWxhdGlvbjsKKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGUgREZHIGFsZ29y
aXRobSBpcyB3aWRlc3ByZWFkLCBhbmQgc291bmQsIGJlY2F1c2UgZmlyZUFsbCgpIGFuZCBpbnZh
bGlkYXRlKCkgd2lsbCBsZWF2ZQorICAgIC8vIHRoZSB3YXRjaHBvaW50IGluIGEgIWlzU3RpbGxW
YWxpZCgpIHN0YXRlLiBIZW5jZSwgaWYgZmlyZUFsbCgpIG9yIGludmFsaWRhdGUoKSBpbnRlcmxl
YXZlZCBiZXR3ZWVuCisgICAgLy8gdGhlIGZpcnN0IGlzU3RpbGxWYWxpZCgpIGNoZWNrIGFuZCB0
aGUgc2Vjb25kIG9uZSwgdGhlbiBpdCB3b3VsZCBzaW1wbHkgY2F1c2UgdGhlIERGRyB0byByZXRy
eQorICAgIC8vIGNvbXBpbGF0aW9uIGxhdGVyLgorICAgIC8vCisgICAgLy8gQnV0LCBpZiB5b3Ug
Y2hhbmdlIHNvbWUgcGllY2Ugb2Ygc3RhdGUgdGhhdCB0aGUgREZHIG1pZ2h0IG9wdGltaXplIGZv
ciwgYnV0IGludmFsaWRhdGUgdGhlCisgICAgLy8gd2F0Y2hwb2ludCBieSBkb2luZzoKKyAgICAv
LworICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgp
CisgICAgLy8KKyAgICAvLyB0aGVuIHRoZSBERkcgd291bGQgbmV2ZXIga25vdyB0aGF0IHlvdSBp
bnZhbGlkYXRlZCBzdGF0ZSBiZXR3ZWVuIHRoZSB0d28gY2hlY2tzLgorICAgIC8vCisgICAgLy8g
VGhlcmUgYXJlIHR3byB3YXlzIHRvIHdvcmsgYXJvdW5kIHRoaXM6CisgICAgLy8KKyAgICAvLyAt
IENhbGwgZmlyZUFsbCgpIHdpdGhvdXQgYSBpc0JlaW5nV2F0Y2hlZCgpIGNoZWNrLiBUaGVuLCB0
aGUgREZHIHdpbGwga25vdyB0aGF0IHRoZSB3YXRjaHBvaW50IGhhcworICAgIC8vICAgYmVlbiBp
bnZhbGlkYXRlZCB3aGVuIGl0IGRvZXMgaXRzIHNlY29uZCBjaGVjay4KKyAgICAvLworICAgIC8v
IC0gRG8gbm90IGV4cG9zZSB0aGUgd2F0Y2hwb2ludCBzZXQgdG8gdGhlIERGRyBkaXJlY3RseSwg
YW5kIGhhdmUgeW91ciBvd24gd2F5IG9mIHZhbGlkYXRpbmcgd2hldGhlcgorICAgIC8vICAgdGhl
IGFzc3VtcHRpb25zIHRoYXQgdGhlIERGRyB0aHJlYWQgdXNlZCBhcmUgc3RpbGwgdmFsaWQgd2hl
biB0aGUgREZHIGNvZGUgaXMgaW5zdGFsbGVkLgogICAgIGJvb2wgaXNCZWluZ1dhdGNoZWQoKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKGlzRmF0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTIsNyArMjExMiw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0QnkKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsg
Ly8gbmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gc3RydWN0
dXJlIGNoYWluCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFB1dEJ5SWROb25lKTsgLy8gaXMg
bm90IGRpcmVjdAorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KFB1
dEJ5SWROb25lKSk7IC8vIGlzIG5vdCBkaXJlY3QKIAogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAg
LTIxMzQsNyArMjEzNCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGly
ZWMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCgwKTsgLy8gbmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsgLy8gc3RydWN0dXJlIGNoYWluICh1bnVzZWQgaWYgZGlyZWN0KQotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCgocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8
IHByb3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRC
eUlkSXNEaXJlY3QgOiBQdXRCeUlkTm9uZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0
YXRpY19jYXN0PGludD4oKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
ci5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBT
cGVjTm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0
KTsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQsIGFkbWl0dGVkVHlw
ZXMpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTM5LDcgKzEz
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2Rl
KSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0
cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBl
IGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJB
cnJheU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRp
b25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVj
dHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpCisgICAgICAg
IGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAgICAgICAgICAgICAmJiAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0Nl
bGwpKSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCBt
X2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CisgICAgICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCk7
CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSAtIGlzIGl0IFRPUCwg
YSBjb25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBz
dWJ0bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBn
aXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2Un
ZAogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgogICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1
bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdWlkLCBzdGF0
dXNbaV0ub2Zmc2V0KCksIG1fZ3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09
IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0g
cmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTg4MCw3
ICsxODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVl
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJl
YWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0
cnVjdHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIgKzE4NzcsMjMgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyB0aGF0IGluY2x1ZGVz
IHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNvdWxkIG1ha2UgdGhlIHN0
cnVjdHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4gV2UgY3VycmVudGx5IGRv
bid0LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQog
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENlbGxPck90aGVyOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNP
dGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOworICAgICAgICAK
KyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4NCwyOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQpOwotICAgICAg
ICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5m
cmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJl
cl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMgdGhhdCBoYW5kbGVzIGlu
ZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5nIHRoZSBzdHJ1Y3R1cmUK
KyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90IG9wdGltYWwuIEluIHNv
bWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAodXN1YWxseQorICAgICAg
ICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkgQ1NFIGZvciBleGFtcGxl
KSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIGF0
IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHksIHdoZW4gdGhhdCBo
YXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAgICAgLy8gb24gdGhlIHR5
cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4KKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5vZmZzZXQsIG1fc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhh
dCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0aCBpcyBiZXR0ZXIuCisg
ICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAgICAgICB0eXBlRnJvbVBh
cnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEtPmluZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOwor
CisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2
YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2JhYmx5CisgICAgICAgIC8v
IGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgorICAgICAg
ICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZh
bHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1
ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAsNiArMjEzNiw4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVz
ZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9u
bHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcl07CisKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0
cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTIx
MjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6
Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRDYXNlLm1ldGhv
ZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3Rh
bnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAg
ICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisg
ICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0
aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAg
bV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAot
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICBjYXNlIEdldEJ5
T2ZmZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoCisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIGdldENhc2UubWV0aG9kKCkub2Zmc2V0KCksIG1f
Z3JhcGguc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAg
IHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfSB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlv
bikKQEAgLTIxNjMsNiArMjE5Miw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAg
ICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdWYWx1ZTsKICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBA
IC0yMTcwLDYgKzIyMDEsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAo
dGhpc1NldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKKyAgICAgICAgICAg
IHRoaXNWYWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CisgICAg
ICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzdmFsdWUpOworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5h
cHBlbmQoCkBAIC0yMTg1LDYgKzIyMjEsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhjbG9iYmVyTGltaXQsIHRy
YW5zaXRpb25zKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0
cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICBt
X3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBmb3Iobm9kZShub2RlLT5jaGlsZDIo
KSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVz
dWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2NCwxMyArMjMwMywxMyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1
c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1
Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAg
ICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAg
ICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNp
dGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogRmls
dHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zmls
dGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkK
KyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1
bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0gICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBo
LCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNl
dCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlvbk9LKQogICAgICAgICByZXR1cm4gRmlsdHJh
dGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgcmV0dXJuIENvbnRy
YWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTYg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNo
IChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Cisg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090aGVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAg
ICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgc2V0
KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAg
c2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
c2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgbWVyZ2UoU3BlY090
aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6Cisg
ICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIHNldFR5cGUoZ3JhcGgs
IFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3AoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQWJz
dHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRl
KQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgaWYgKGNsb2JiZXJTdGF0ZSA9
PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOwor
fQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYg
Z3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
cmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAtMTg5LDggKzIzOSwyMiBA
QCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAgICAgcmV0dXJuIG9s
ZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRl
cihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCitib29sIEFic3RyYWN0
VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOwor
ICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVycmVkVHlwZSk7CisKKyAgICBBYnN0cmFjdFZh
bHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVl
KTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9PSB0eXBlVmFsdWU7Cit9CisKK0ZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKK3sKKyAg
ICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAoaXND
bGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcgKzI2
Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAvLyBo
YXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgIAot
ICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90
eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlwZXM7
CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwog
ICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkBAIC0zMTUsNiArMzc5LDEzIEBA
IEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMKICAgICByZXR1cm4gQ29u
dHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIo
R3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKKyAgICBmaWx0ZXJWYWx1ZS5zZXQo
Z3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBmaWx0ZXIoZmlsdGVyVmFsdWUpOworfQor
CiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBj
b3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiCisjaW5j
bHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3Bl
Y3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgpAQCAtMjE0LDcgKzIxNSwx
MCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7
CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHNl
dChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgIHZvaWQgc2V0
KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgU3RydWN0dXJlQ2xvYmJl
clN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9k
ZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZml4VHlw
ZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwogICAgIApAQCAtMjgwLDE3ICsyODQs
MjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuICEobV90
eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisKKyAgICBib29sIGlzVHlwZShHcmFwaCYsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgLy8gRmlsdGVycyB0
aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElmIHRoZSBhZG1pdHRlZFR5
cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAgICAvLyBpbXBsaWNpdGx5IGZpbHRl
cnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFyZSB1
c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwuIEhlbmNlLCBhZnRlciB0aGlzIGNh
bGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24tY2VsbCBtZW1iZXJzLiBC
dXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21lIG5v
bi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0byBv
dmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
cihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlw
ZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgm
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5
TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5W
YWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0
VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBjaGFu
Z2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKICAgICBib29s
IGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCB2YWxpZGF0ZShK
U1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsOSArMjA2LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wg
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5h
bEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwot
ICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0
KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwg
Tm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNl
ZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJlIHNldC4gRG9lcyBub3QKICAgICAv
LyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlvbiwgYnV0IGl0IG1heSByZXR1cm4g
YSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJhZGljdGlvbi4KQEAgLTIzMDcsNyAr
MjMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVk
VHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlm
IChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxOCwxMyArMjMxOSwxNiBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zm
c2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVt
YmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAgICAKICAgICBO
b2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwogCiAgICAgcmV0dXJuIGdldEJ5T2Zm
c2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSog
YmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2
YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKKyAgICBOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlLAorICAgIE5vZGUqIHZhbHVl
KQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
b2Zmc2V0KSkKQEAgLTIzMzUsNiArMjMzOSw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAg
ZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CisgICAgZGF0YS0+aW5mZXJyZWRU
eXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgo
UHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7
CiAgICAgCkBAIC0yNDQ5LDcgKzI0NTQsOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgK
ICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25z
dGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6
IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0
KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCks
IG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJl
ZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5m
ZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6
TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBA
IC0yNTU1LDEzICsyNTYxLDEzIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAog
ICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwor
ICAgIAogICAgIGlmIChKU09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU09iamVjdCo+KCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhl
IHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5n
IGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hl
ZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1
Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAg
ICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghdmFyaWFu
dC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJh
c2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBv
bmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMg
aW4gdGhlCkBAIC0yNjI2LDkgKzI2MzIsMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQo
CiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtK
U0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAgfQorCisgICAgICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CisgICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2sp
IHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVj
dHVyZVNldCgpKQorICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZS5tZXJnZShtX2dyYXBoLmlu
ZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgICAgIAog
ICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgbG9h
ZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxv
YWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBsb2FkT3ApOwogICAgIH0KIAogICAg
IHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2MzksNyArMjY1Miw3IEBAIE5vZGUqIEJ5dGVDb2Rl
UGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlTGlr
ZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0
KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChi
YXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGhh
bmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlh
bnQuaW5mZXJyZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlJZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCisj
aW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25T
ZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIK
QEAgLTQ0OCw2ICs0NDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEFTU0VSVChjaGls
ZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsK
KyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlVmFsdWUgPSBtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpOwogCiAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVj
dXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdl
dCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1
ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5n
cyB0byB0aGlzLgpAQCAtNDYzLDcgKzQ2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdHVzLm51bVZhcmlhbnRzKCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+IDEgJiYgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUpKQpAQCAtNjY2LDYgKzY2OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJ
bkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAg
ICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBp
bmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpLCB2YXJpYW50LnJlcXVp
cmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2Vs
bFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRGVzaXJl
ZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRo
aXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3RhdGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBz
cGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0byBoYXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRU
eXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVjdCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmln
aW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZEluZmVycmVkVHlwZSB7CitwdWJsaWM6CisgICAg
RGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7
CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmpl
Y3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZXhwZWN0ZWQpCisgICAgICAgIDog
bV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZXhwZWN0ZWQoZXhwZWN0ZWQpCisgICAgewor
ICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9leHBlY3Rl
ZChJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAg
IEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4cGVj
dGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0ZWQpOworICAgIH0KKworICAgIHZvaWQg
YWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICBtX29iamVj
dC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fZXhw
ZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1f
ZXhwZWN0ZWQgPT0gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEluZmVycmVkVHlw
ZSo+OjpoYXNoKG1fb2JqZWN0KSArIG1fZXhwZWN0ZWQuaGFzaCgpICogNzsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQs
IGNvbnRleHQpLCAiIGZvciAiLCBSYXdQb2ludGVyKG1fb2JqZWN0KSk7CisgICAgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBkdW1wSW5D
b250ZXh0KG91dCwgbnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIEluZmVycmVkVHlw
ZSogbV9vYmplY3Q7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Cit9
OworCitzdHJ1Y3QgRGVzaXJlZEluZmVycmVkVHlwZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEs
IGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7CisgICAgdHlwZWRlZiBK
U0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDYgKzY1LDExIEBAIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cjoKICAgICB9CiB9CiAKK3ZvaWQgSW5mZXJyZWRUeXBlQWRhcHRvcjo6YWRkKENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIENvbW1vbkRhdGEmIGNv
bW1vbikKK3sKKyAgICBrZXkuYWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7
Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNp
cmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIApAQCAtOTMsNiArOTgs
MTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdAogICAgIG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCit2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKK3sKKyAg
ICBtX2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNo
cG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVj
dHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEwOCw2ICsxMTgsNyBAQCB2b2lkIERlc2lyZWRX
YXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChj
b2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxs
eUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5mZXJyZWRUeXBlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTE2LDcgKzEyNyw4IEBAIGJvb2wgRGVzaXJlZFdh
dGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0
aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQog
ICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYWRhcHRp
dmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2luZmVycmVkVHlw
ZXMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKQEAg
LTEyNyw2ICsxMzksNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQ
CiAgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFsdWVzOiAiLCBpbkNvbnRleHQobV9pbmZl
cnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIEJ1ZmZlciB2
aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsKICAgICBv
dXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250ZXh0KG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIg
ICAgSW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVHlwZXMsIGNvbnRleHQp
LCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1ZGUgIkRGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgpAQCAtOTEsNiArOTIsMTggQEAgc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFk
YXB0bwogICAgIH0KIH07CiAKK3N0cnVjdCBJbmZlcnJlZFR5cGVBZGFwdG9yIHsKKyAgICBzdGF0
aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYsIENvbW1v
bkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNTdGlsbFZh
bGlkKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBEdW1wQ29udGV4dCogY29udGV4
dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7Cisg
ICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1l
IEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBjbGFzcyBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNTks
NiArMTcyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRv
bid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGlj
aCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhl
ciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYpOworCisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxs
IHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKCksIHdoaWNoIGRvZXMK
KyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJl
Kik7CiAgICAgCkBAIC0xODYsNiArMjAzLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKICAgICB9CisgICAg
Ym9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAKICAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtMTk2LDYgKzIxNyw3IEBAIHBy
aXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5m
ZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRX
YXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRB
ZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+
IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8
RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJyZWRUeXBlQWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVz
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDkyLDYgKzEwOTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2so
CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG1faW5kZXhJbkJsb2NrLCBub2RlLT5v
cmlnaW4sIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAgICAgICAgICAgICBzcGVjdWxhdGVGb3JC
YXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4Nyw2ICs4ODcsNTAgQEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0
KiBiYXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIo
YmFzZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5m
ZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFzc2VydElz
UmVnaXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5m
ZXJyZWRUeXBlcy5nZXQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtX2luZmVycmVkVHlwZXMuZW5k
KCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIEluZmVycmVkVHlwZSogdHlw
ZU9iamVjdCA9IGtleS5zdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGtleS51aWQoKSk7Cisg
ICAgaWYgKCF0eXBlT2JqZWN0KSB7CisgICAgICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCBJ
bmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAg
ICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURlc2NyaXB0b3IgPSB0eXBl
T2JqZWN0LT5kZXNjcmlwdG9yKCk7CisgICAgaWYgKCF0eXBlRGVzY3JpcHRvci5pc1N0aWxsVmFs
aWQoKSkgeworICAgICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpU
b3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorICAgIAorICAg
IG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCB0eXBlRGVzY3JpcHRvcik7CisKKyAgICBtX3BsYW4u
d2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHR5cGVPYmplY3QpOworICAgIGlmICh0eXBlRGVzY3Jp
cHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZURlc2NyaXB0
b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdh
dGNoaW5nIHRoaXMgZGVzaXJlZCBpbmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVj
dHVyZXMgbWF5CisgICAgLy8gcG9pbnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNl
LgorICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0
eXBlT2JqZWN0LCB0eXBlRGVzY3JpcHRvcikpOworCisgICAgcmV0dXJuIHR5cGVEZXNjcmlwdG9y
OworfQorCitib29sIEdyYXBoOjp3YXRjaERlc2lyZWRUeXBlKGNvbnN0IERlc2lyZWRJbmZlcnJl
ZFR5cGUmIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkub2Jq
ZWN0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGtleS5leHBlY3RlZCgpLnN0
cnVjdHVyZSgpKQorICAgICAgICByZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIG1f
cGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoa2V5KTsKK30KKwogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBIYXNo
TWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+Ojpp
dGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAgLTEw
NjEsNyArMTEwNSw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlMK
IEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBiYXNl
LCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlzQ2xv
YmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAgICAv
LyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2UgY291
bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8gY29u
c3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTEyMCwzNSBAQCBKU1ZhbHVl
IEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENvbnN0
YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwogfQog
CitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0Owor
ICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewor
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNldCgq
dGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAg
ICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFz
ZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNGaW5pdGUo
KSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShiYXNlLm1fc3RydWN0
dXJlLnNldCgpLCB1aWQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1cm4gQWJzdHJhY3RWYWx1
ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVW
YXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAgICAgLy8gVGhpcyBoYXMg
YW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZh
ciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDYgKzY3NSwyMSBAQCBwdWJsaWM6CiAgICAgLy8g
Q2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBh
dCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21wdXRlZCBieSB0
cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4K
ICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOwor
CisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdlIGFyZSBhYmxlIHRvIHByb3Zl
IHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1dHVyZS4KKyAgICBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYp
OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBlS2V5KHN0cnVjdHVyZSwgdWlk
KSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHko
CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKworICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29u
c3RhbnQgcHJvcGVydHkgaW5mZXJlbmNlIG9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRl
cml2ZSBhIGdvb2QgYWJzdHJhY3QKKyAgICAvLyB2YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nl
c3NlZCB3aXRoIHRoZSBnaXZlbiBhYnN0cmFjdCB2YWx1ZSBiYXNlLgorICAgIEFic3RyYWN0VmFs
dWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJl
Q2xvYmJlclN0YXRlKTsKICAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NG
b3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElu
bGluZUNhbGxGcmFtZSopOwpAQCAtODU2LDYgKzg3MSw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFw
PENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0
ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxC
eXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpT
T2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CisgICAgSGFzaE1hcDxQcm9w
ZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwog
ICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQ
b3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRpb25TZXQmIGlu
c2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSog
YmFzZU5vZGUsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9t
OgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBG
b3JjZU9TUkV4aXQsIG9yaWdpbik7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5k
ZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKEJvb2xlYW5Vc2UsIGJhc2VOb2RlKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9y
aWdpbiwgRWRnZShPdGhlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKEludDMyVXNlLCBiYXNl
Tm9kZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVy
OgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBD
aGVjaywgb3JpZ2luLCBFZGdlKE51bWJlclVzZSwgYmFzZU5vZGUpKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShTdHJp
bmdVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmln
aW4sCisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJl
U2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIEVkZ2UoQ2VsbFVzZSwgYmFzZU5v
ZGUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAg
ICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1
Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShDZWxsT3JPdGhlclVzZSwgYmFzZU5vZGUpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9y
aWdpbiwgRWRnZShPYmplY3RVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKE9iamVj
dE9yT3RoZXJVc2UsIGJhc2VOb2RlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5m
ZXJyZWR0eXBlOjpUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0go
aW5zZXJ0aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlw
ZUNoZWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
ZmVycmVkVHlwZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJy
ZWRUeXBlQ2hlY2tfaAorI2RlZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIklu
ZmVycmVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIElu
c2VydHMgYSB0eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2
ZW4gaW5mZXJyZWQgdHlwZS4KK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5z
ZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9k
ZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5m
ZXJyZWRUeXBlQ2hlY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3Ry
dWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0
aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2Ug
bmVlZCB0byByZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywg
dGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQg
dHlwZSBpcworICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IGluZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtl
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gK
KyNkZWZpbmUgREZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3BlcnR5J3MgdHlw
ZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVuaXF1ZWRTdHJpbmdJbXBsKi4KKwor
Y2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVR5cGVLZXkoKQor
ICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV91aWQobnVsbHB0cikK
KyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVy
ZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKworICAgIFByb3BlcnR5VHlw
ZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3Qo
bnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVkVUlEKCkpCisgICAgeworICAgIH0KKwor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSAm
JiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dWlkOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0
cnVjdHVyZQorICAgICAgICAgICAgJiYgbV91aWQgPT0gb3RoZXIubV91aWQ7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0
cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSArIFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5n
SW1wbCo+OjpoYXNoKG1fdWlkKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV91aWQg
PT0gZGVsZXRlZFVJRCgpOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91
dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwg
bV91aWQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgVW5pcXVlZFN0cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0YXRpY19j
YXN0PGludHB0cl90PigxKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1
cmU7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworfTsKKworc3RydWN0IFByb3BlcnR5
VHlwZUtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlw
ZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFt
ZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
K3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+
IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVL
ZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAg
ICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAg
ICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2Fz
ZSBGaW5hbE9iamVjdFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIz
Miw2ICs1MjMyLDgwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSoK
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQUiwgR1BS
UmVnIHRlbXBHUFIpCit7CisgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7
CisgICAgCisgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFr
U3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFyeT4gc3Ry
dWN0dXJlOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSOworICAgICAgICAKKyAgICAgICAg
aWYgKHRlbXBHUFIgPT0gSW52YWxpZEdQUikgeworICAgICAgICAgICAgc3RydWN0dXJlID0gc3Rk
OjptYWtlX3VuaXF1ZTxHUFJUZW1wb3Jhcnk+KHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJl
R1BSID0gc3RydWN0dXJlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1
Y3R1cmVHUFIgPSB0ZW1wR1BSOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9u
ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0
dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBkb25lLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXIoSklUQ29tcGlsZXI6OkVxdWFs
LCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3Mg
PSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2Vs
bCh2YWx1ZVJlZ3MpOworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVl
UmVncywgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAg
bV9qaXQuYnJhbmNoSWZOb3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZt
X2ppdCk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IG5vUmVzdWx0KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoK
KyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRy
YW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2
MzYsNiArNTcxMCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2Ug
CiAgICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAg
IGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwor
ICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG9rID0gbV9qaXQuYnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3Bl
Y0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFu
ZC5qc1ZhbHVlUmVncygpLCB0ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlm
ICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYwMDYsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxs
VXNlOgogICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBj
YXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9i
amVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyMTUsNiArMjIxNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVs
bChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlVHlwZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2Rl
KiwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVj
a1N0cnVjdHVyZShOb2RlKik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAg
ICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1
bGF0ZUJvb2xlYW4oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZv
aWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3Qo
RWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1
bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTgxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkp
OyB9Ci0gICAgCisKICAgICAvLyBJbiBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkgd2FudCB0
byBkbyBpcyB2ZXJpZnkgd2hldGhlciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQsIGFuZAog
ICAgIC8vIGlmIG5vdCwgZW51bWVyYXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMg
b25seSBpbiBjYXNlcyB3aGVyZSB0aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBtZWFuaW5n
ZnVsbHkgc3BlY2lhbCwgbGlrZSBmb3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAyLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gbV9z
ZXQub25seVN0cnVjdHVyZSgpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0
b3IpOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw2ICs3OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBVc2UKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnByaW50KCJL
bm93bkNlbGwiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6Cisg
ICAgICAgIG91dC5wcmludCgiQ2VsbE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkJvb2xl
YW5Vc2UsCiAgICAgQ2VsbFVzZSwKICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9yT3RoZXJV
c2UsCiAgICAgT2JqZWN0VXNlLAogICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2JqZWN0VXNl
LApAQCAtMTA4LDYgKzEwOSw4IEBAIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9y
KFVzZUsKICAgICBjYXNlIENlbGxVc2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAg
IHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICByZXR1
cm4gU3BlY0NlbGwgfCBTcGVjT3RoZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHJl
dHVybiBTcGVjT2JqZWN0OwogICAgIGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODk4MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxOCw2ICs0MTgsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShH
cmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAg
ICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxs
VXNlOgorICAgICAgICAgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAg
ICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMjYsMjEgKzIwMjYsNTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0S2luZCBl
eGl0S2luZDsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUg
c3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
SUQpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1
Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKSwKLSAgICAgICAgICAgIFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVj
dHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxf
c3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtp
bmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVy
ZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNh
c2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOwor
CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJl
KG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3Ry
dWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0
S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVj
dHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0
dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2Vs
bENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNO
b3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hl
Y2tDZWxsKCkKQEAgLTQwMjIsNiArNDA1Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9j
a3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworCisgICAgICAgICAgICBjaGVja0luZmVy
cmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CkBAIC01Njc0
LDYgKzU3MTEsMTM0IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBy
ZXN1bHRzKTsKICAgICB9CisKKyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2UgZWRnZSwg
TFZhbHVlIHZhbHVlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAg
eworICAgICAgICAvLyBUaGlzIGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlwZUNoZWNr
KCkgYmVjYXVzZSBpdCBpcyBjYWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlrZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAgICAgICAv
LworICAgICAgICAvLyBtYXkgYmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNhc2UgNDI6
CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7CisgICAg
ICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
ICAgICBjYXNlIDQzOgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwg
dHlwZTIpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFr
OworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0eXBlMSBh
bmQgdHlwZTIgYXJlIGRpZmZlcmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVhbiB0aGF0
IHRoZSBlZGdlIHdvdWxkIGJlCisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYgdHlwZTIs
IGluc3RlYWQgb2YgdHlwZTEgfCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodHlw
ZS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
bV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T3RoZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
SW50MzI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZS5ub2RlKCksIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLCBpc05vdE51bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdFN0cmlu
Zyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIGlmICghYWJzdHJh
Y3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHR5cGUuc3RydWN0dXJlKCkpKSB7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFs
dWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlw
ZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUo
Y2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworCisg
ICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRP
Zih0eXBlLnN0cnVjdHVyZSgpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
CisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisg
ICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5U
eXBlICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhl
cjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2VsbCBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1
cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwor
CisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RPYmplY3Qo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENl
bGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAg
ICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAg
ICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5TcGVjQ2Vs
bCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KICAgICAKICAgICBMVmFsdWUg
bG9hZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNzUxNCw2ICs3Njc5LDkgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdl
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJw
cmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTk0
LDYgKzc3NjIsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAgeworICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENl
bGxPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goaXNDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShp
c05vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzTm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIo
dmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAgICB2
b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgaWYgKCFt
X2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpAQCAtODEyNyw2ICs4MzExLDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmIChmYWlsQ29u
ZGl0aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAg
ICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0
YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KApAQCAtODEzNSw5ICs4MzIyLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
bnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhp
dC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAgCisKICAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CiAKKyAg
ICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKKyAgICAgICAg
ICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKwogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3MCBAQCBWZWN0b3I8Qnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFu
Y2hJZk5vdFR5cGUoCisgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBc3NlbWJseUhl
bHBlcnM6Okp1bXBMaXN0IHJlc3VsdDsKKworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkp
IHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICByZXN1bHQuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xl
YW46CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RCb29sZWFuKHJlZ3MsIHRlbXBH
UFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPdGhlcihyZWdzLCB0ZW1wR1BSKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVncykpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3ROdW1iZXIocmVncykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdzLnBheWxv
YWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChy
ZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKHJlZ3MucGF5bG9h
ZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAg
IEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoU3RydWN0dXJlKHJlZ3MucGF5bG9hZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7
CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChy
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJl
Z3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdz
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTihG
UFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IGJyYW5jaERv
dWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MTks
NiArNzE5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgSnVtcExpc3QgYnJhbmNo
SWZOb3RUeXBlKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVt
cCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhh
bmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICszNzcsOCBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVk
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICYmIE1hY3JvQXNz
ZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2Up
Ci0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKSB7CisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LmltcGwoKSkpIHsKIAogICAgICAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2Vs
ZkFjY2VzcygKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MzMsNiArNjMzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9p
ZAogICAgICAgICBwY1s1XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBvZmZzZXQKICAgICAgICAg
cGNbNl0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gbmV3IHN0cnVjdHVyZQogICAgICAgICBwY1s3
XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBzdHJ1Y3R1cmUgY2hhaW4KKyAgICAgICAgcGNbOF0u
dS5wdXRCeUlkRmxhZ3MgJj0gUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2s7CiAgICAgICAgIAog
ICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTY2MCwxMiAr
NjYxLDE2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNldCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHw9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0
QnlJZEZsYWdzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQ
cm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAg
ICAgICBwY1s0XS51LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgICAgICAgICAg
ICAgIHBjWzVdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICAg
ICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgfD0KKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyNjUsMTQgKzEyNjUsODcgQEAgX2xsaW50
X29wX3B1dF9ieV9pZDoKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxs
KHQzLCB0MCwgLm9wUHV0QnlJZFNsb3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlE
W3QwXSwgdDIKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmluZXEgdDIs
IHQxLCAub3BQdXRCeUlkU2xvdworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MikKKyAg
ICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAog
ICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJyZW50IHN0
cnVjdHVyZSBJRAorICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+
IG9iamVjdCBiYXNlCiAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig4
LCB0MSkKKworICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVj
dCBiYXNlCisgICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1cnJlbnQg
c3RydWN0dXJlIElECisgICAgIyB0MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56IHQxLCBQ
dXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIKKworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlw
ZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTWFzaywgdDEKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9w
UHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhl
IGZvbGxvd2luZzogU3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAgIGJwbHQg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVj
a0xlc3NUaGFuT2JqZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3Ro
ZXIgb3IgVG9wLgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRC
eUlkRG9uZUNoZWNraW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3Ro
ZXIuCisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorLm9w
UHV0QnlJZFR5cGVDaGVja090aGVyOgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDMKKyAg
ICBicWVxIHQzLCBWYWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGpt
cCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90
aGVyOgorICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0cW56IHQz
LCB0YWdNYXNrLCAub3BQdXRCeUlkU2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0NlbGw6Om1f
dHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGpt
cCAub3BQdXRCeUlkU2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBiYmFlcSBK
U0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBl
cworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5T
dHJpbmc6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVh
biwgT3RoZXIsIEludDMyLCBOdW1iZXIKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZUludDMyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBXZSBhcmUg
ZWl0aGVyIEludDMyIG9yIE51bWJlci4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU51bWJlciwgLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcgorCisgICAgYnFhZXEgdDMsIHRhZ1R5
cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlk
U2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0YWdUeXBl
TnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNs
b3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25l
IG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBuZXEgdDEs
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9y
T3RoZXIKKyAgICB4b3JxIFZhbHVlRmFsc2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5
SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlk
VHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
KworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJ0
cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlLCAub3BQdXRCeUlk
VHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZQorICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQ
dXRCeUlkVHlwZUNoZWNrT3RoZXIKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1
Y3R1cmU6CisgICAgdXJzaGlmdHAgMywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBidGl6IHQxLCAu
b3BQdXRCeUlkTm90VHJhbnNpdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTg5ODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBMb3dlc3RUYWcg
PSBEZWxldGVkVmFsdWVUYWcKIGVuZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVzdCBi
ZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0IFB1dEJ5SWRQ
cmltYXJ5VHlwZU1hc2sgPSAweDYKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9
IDB4MAorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4Mgor
Y29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQK
K2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1dEJ5SWRTZWNv
bmRhcnlUeXBlQm90dG9tID0gMHgwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4g
PSAweDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitjb25zdCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVO
dW1iZXIgPSAweDIwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgKK2Nv
bnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVU
b3AgPSAweDQwCisKIGNvbnN0IENhbGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQgb3IgQVJN
NjQgb3IgQ19MT09QCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6
OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5m
ZXJyZWRUeXBlKSB9OworCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZTo6Y3JlYXRlKFZNJiB2
bSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZSh2bSk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZSogaW5m
ZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisgICAgaW5mZXJy
ZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsKK30KKworU3RydWN0dXJlKiBJ
bmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRU
eXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisKKyAgICBp
ZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRp
dGlvbmFsRmluYWxpemVyKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUuZ2V0KCkpOworfQorCitJ
bmZlcnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdz
IGZsYWdzKQoreworICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7
CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6CisgICAgICAgIHN3aXRjaCAo
ZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAgICAgY2FzZSBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUJvdHRvbToKKyAgICAgICAgICAgIHJldHVybiBCb3R0b207CisgICAgICAg
IGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEJv
b2xlYW47CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjoKKyAgICAgICAg
ICAgIHJldHVybiBPdGhlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMy
OgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlTnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICAgICAgY2FzZSBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7Cisg
ICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3Q6CisgICAgICAgICAgICByZXR1
cm4gT2JqZWN0OworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhl
cjoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90aGVyOworICAgICAgICBjYXNlIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlVG9wOgorICAgICAgICAgICAgcmV0dXJuIFRvcDsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gQm90dG9tOworICAgICAgICB9CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVy
ZTsKKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IEJvdHRvbTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
LmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIE90aGVyOworICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIo
KSkKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAg
ICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5p
c1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgaWYgKGNlbGwt
PmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
RGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUb3A7
Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIEtpbmQga2luZCA9
IGtpbmRGb3JGbGFncyhmbGFncyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgaWYg
KGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSk7CisgICAgZWxzZQorICAg
ICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIHJldHVybiBEZXNjcmlwdG9yKGtpbmQsIHN0
cnVjdHVyZSk7Cit9CisKK1B1dEJ5SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnB1
dEJ5SWRGbGFncygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJv
dHRvbToKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlQm90dG9tOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgcmV0dXJu
IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVh
bjsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vj
b25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjsKKyAgICBjYXNlIEludDMyOgorICAg
ICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFy
eVR5cGVJbnQzMjsKKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRQcmlt
YXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOworICAgIGNhc2Ug
U3RyaW5nOgorICAgICAgICByZXR1cm4gUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0
QnlJZFNlY29uZGFyeVR5cGVTdHJpbmc7CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHJldHVy
biBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVj
dDsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFy
eVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXI7CisgICAg
Y2FzZSBUb3A6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVRvcDsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Cisg
ICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlIHwgZW5j
b2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpOworICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHJldHVybiBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgp
KTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
UHV0QnlJZE5vbmU7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjptZXJnZShj
b25zdCBEZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9t
OgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29s
ZWFuOgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIG1fa2luZCA9IE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIE9iamVjdDoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgSW50MzI6CisgICAgICAg
IHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAg
ICAgbV9raW5kID0gTnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2Ug
T2JqZWN0OgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAq
dGhpcyA9IG90aGVyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90
aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAg
ICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0
cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAqdGhpcyA9IE9i
amVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0Ogor
ICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9i
amVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKG90aGVy
Lm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAg
IG1fa2luZCA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNl
IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAg
ICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVt
b3ZlU3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAqdGhpcyA9IE9i
amVjdE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm47CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMo
Y29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRvciBtZXJnZWQg
PSAqdGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAqdGhpcyA9PSBt
ZXJnZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50
KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJl
ZFR5cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJlLmdl
dCgpKQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5m
ZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6Omlz
U3RpbGxWYWxpZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2Ny
aXB0b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9wKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9
PSBleHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZChjb25zdCBE
ZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIHJldHVybiBpc1N0aWxsVmFsaWQobG9ja2VyLCBleHBlY3RlZCk7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7CisKKyAgICBtX3dhdGNocG9pbnRT
ZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2lu
dChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdhdGNocG9pbnQpOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIGRlc2NyaXB0b3IoKSk7Cit9CisKK2Jv
b2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgRGVzY3Jp
cHRvciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3JpcHRvciBvdGhlclR5
cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5cGUubWVyZ2Uob3Ro
ZXJUeXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0gbXlUeXBlKTsgLy8g
VGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KKwor
ICAgIHNldChsb2NrZXIsIHZtLCBteVR5cGUpOworCisgICAgcmV0dXJuIGtpbmQobG9ja2VyKSAh
PSBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0pCit7Cisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2VyLCB2
bSwgVG9wKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQoreworICAg
IC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2Nr
LiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAorICAgIC8vIGNv
dWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0
aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIg
aW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUg
dGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3Jl
IG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBh
bnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1vcmUg
Z2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iu
c3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUgbmV3IGRlc2Ny
aXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUgYmVj
YXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgp
ICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCghZGVzY3JpcHRv
cihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKwor
ICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYgYW55
b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCisgICAgLy8g
YW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQgd2Ug
ZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dhdGNocG9pbnRT
ZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90IGhh
dmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVhZHkg
YmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gSXNJ
bnZhbGlkYXRlZCk7CisKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZlIHRo
aW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhpcyB0
eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0IHRo
aXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5ncyBm
b3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAgICAg
ICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoIkluZmVycmVkIHR5cGUgY2hhbmdlZCIpOworICAg
IH0KKworICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3
ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkp
CisgICAgICAgIG1fc3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgIC8vIEFkZCBhIG5ldyBJbmZl
cnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgorICAgIGlmIChuZXdEZXNj
cmlwdG9yLnN0cnVjdHVyZSgpKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJl
LgorICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1
Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odGhpcywgbmV3RGVz
Y3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChtX3N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KKyAg
ICBtX2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2VydCB0aGF0IHdl
IGRpZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlw
dG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAg
Vk0mIHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX3BhcmVudC0+bV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlwdG9yIG5ld0Rl
c2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRvci5yZW1vdmVT
dHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRvcik7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJ
bnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikKK3sKKyAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5m
ZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUq
PigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VU
T0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fd2F0Y2hwb2ludCkpOworCisgICAgaW5mZXJyZWRTdHJ1
Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6OkluZmVycmVkU3RydWN0dXJlRmlubGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
K3sKKyAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBi
aXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fZmlu
YWxpemVyKSk7CisKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcChpbmZlcnJlZFN0cnVjdHVyZS0+
bV9wYXJlbnQpLT52bSgpOworCisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGluZmVycmVkU3Ry
dWN0dXJlLT5tX3BhcmVudCkpOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQoaW5mZXJy
ZWRTdHJ1Y3R1cmUtPm1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgaW5mZXJyZWRTdHJ1Y3R1
cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6
OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVyZShJbmZlcnJlZFR5cGUqIHBhcmVu
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgLCBt
X3N0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVHlwZTo6S2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Cisg
ICAgICAgIG91dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIG91dC5w
cmludCgiT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJ
bnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAg
IG91dC5wcmludCgiU3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRo
U3RydWN0dXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50
KCJPYmplY3RPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6VG9wOgorICAgICAgICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmZlcnJlZFR5cGVf
aAorI2RlZmluZSBJbmZlcnJlZFR5cGVfaAorCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2su
aCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZlcmVu
Y2Ugb2YgdGhlIHR5cGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgorCitjbGFzcyBJbmZlcnJlZFR5
cGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBC
YXNlOworCisgICAgc3RhdGljIEluZmVycmVkVHlwZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJF
X0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAorICAg
ICAgICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAgIE51
bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAg
ICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAg
ICBPYmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisgICAgS2luZCBraW5kRm9y
RmxhZ3MoUHV0QnlJZEZsYWdzKTsKKyAgICAKKyAgICBib29sIGhhc1N0cnVjdHVyZShLaW5kIGtp
bmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIERlc2NyaXB0b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQo
Qm90dG9tKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBudWxscHRyKQorICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAg
ICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMg
RGVzY3JpcHRvciBmb3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2tpbmQgPT0gQm90dG9tICYmICFtX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKKyAgICAgICAgUHV0QnlJ
ZEZsYWdzIHB1dEJ5SWRGbGFncygpIGNvbnN0OworCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpbmNsdWRlc1ZhbHVlKEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgICAgICAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOworICAgICAgICAgICAgY2FzZSBPdGhlcjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICAgICAg
ICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsK
KyAgICAgICAgICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5p
c051bWJlcigpOworICAgICAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmlzU3RyaW5nKCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlzQ2VsbCgpICYm
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7CisgICAgICAgICAg
ICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNPYmplY3QoKTsK
KyAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAg
ICAgY2FzZSBUb3A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisg
ICAgICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0
dXJlKSBeIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOworICAgICAgICB9CisgICAgCisg
ICAgICAgIHZvaWQgbWVyZ2UoY29uc3QgRGVzY3JpcHRvciYpOworICAgICAgICB2b2lkIHJlbW92
ZVN0cnVjdHVyZSgpOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRlc2NyaXB0
b3IgaXMgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIG90aGVyIG9uZS4KKyAgICAgICAgYm9vbCBzdWJz
dW1lcyhjb25zdCBEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBLaW5kIG1fa2lu
ZDsKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAgQ29uY3Vy
cmVudEpJVExvY2smIGxvY2soKSBjb25zdCB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIERlc2Ny
aXB0b3IgZGVzY3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IERlc2NyaXB0b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUo
KSA6IG51bGxwdHIpOworICAgIH0KKyAgICAKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVz
Y3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICB9CisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgfQorICAgIAorICAgIEtp
bmQga2luZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJu
IGRlc2NyaXB0b3IobG9ja2VyKS5raW5kKCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZShj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0
b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKTsgfQorCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZCA9PSBUb3A7IH0KKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50
IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYg
dm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNj
cmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNj
cmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRE
ZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNs
b3codm0sIHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5
cGUgaXJyZWxldmFudC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mIHZtKQorICAgIHsKKyAgICAgICAg
aWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1ha2VUb3BTbG93KHZt
KTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1ha2VzIHNl
bnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3IuIE5vdGUg
dGhhdAorICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3AuCisgICAg
Ym9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERl
c2NyaXB0b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAK
KyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2Vy
LCBXYXRjaHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluZmVy
cmVkVHlwZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAgIGJvb2wgd2lsbFN0b3Jl
VmFsdWVTbG93KFZNJiwgSlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYpOworICAg
IHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIERlc2NyaXB0b3IpOwor
ICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRM
b2NrIG1fbG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9OworCisgICAgY2xh
c3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikg
b3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVy
IDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
SW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAg
Y2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlKEluZmVycmVkVHlwZSog
cGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVudDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IG1f
d2F0Y2hwb2ludDsKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgbV9maW5hbGl6
ZXI7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9z
dHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRy
YW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQor
ICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGlu
aXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8g
dGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRo
YXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5
cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6
OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkp
IEluZmVycmVkVHlwZVRhYmxlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFi
bGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVk
VHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisK
K1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJy
ZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nh
c3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fdGFibGUpIHsK
KyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRy
eS52YWx1ZS5jbGVhcigpOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVU
YWJsZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKKyAgICBp
ZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcHJ1bmUgaW52YWxp
ZGF0ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNSZWxldmFudCgpKSB7CisgICAg
ICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZl
cnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZ2V0KGxvY2tlciwgdWlk
KTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIGdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwor
fQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1ZSgKKyAgICBWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFN0b3JlZFByb3BlcnR5
QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0
IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICAKKyAgICBp
ZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFR5cGVUYWJsZTo6aXRlcmF0b3IgaXRl
ciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoaXRlciA9PSBtX3Rh
YmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
QWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKyAgICAgICAgCisgICAgICAgIGlmIChpdGVyLT52
YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIFR5cGVUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7
CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJl
c3VsdCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlw
ZT4oKSk7CisgICAgfQorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBJbmZl
cnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5zZXQodm0sIHRoaXMsIGluZmVycmVkVHlwZSk7CisgICAgfSBlbHNlIGlmICghcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjptYWtlVG9wKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQor
eworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5
IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIGlmIChhZ2UgPT0gT2xkUHJv
cGVydHkpIHsKKyAgICAgICAgVHlwZVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5k
KHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0
ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4g
dG9wLgorCisgICAgICAgIGl0ZXItPnZhbHVlLT5tYWtlVG9wKCk7CisgICAgICAgIGl0ZXItPnZh
bHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBUeXBlVGFibGU6OkFkZFJlc3VsdCByZXN1
bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUsIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+
KCkpOworICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1ha2VUb3AoKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGVUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBl
VGFibGVfaAorI2RlZmluZSBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKyNpbmNsdWRlICJJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21l
IHN0cnVjdHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUg
U3RydWN0dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8gbWFu
YWdlLiBGb3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRo
aW5nCisvLyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMg
aXMgc2VwYXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCisv
LyB3aWxsIG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFy
ZSBpbiBkaWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFzIGJl
aW5nICJhIHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMgd2lsbCBoYXBw
aWx5IGNvbmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KKy8vIGRpZmZlcmVudCBz
dHJ1Y3R1cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pvaW50IHNldHMg
b2Ygb2JqZWN0cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIElu
ZmVycmVkVHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIENv
bmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisgICAgLy8gR2V0
IHRoZSBjdXJyZW50IGluZmVycmVkIHR5cGUuIFJldHVybnMgbnVsbHB0ciBmb3IgYm90aCBUb3Ag
YW5kIEJvdHRvbS4gTnVsbCBtZWFucyBCb3R0b20gaWYgdGhlCisgICAgLy8gb3duaW5nIFN0cnVj
dHVyZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHByb3BlcnR5LgorICAgIEluZmVycmVkVHlwZSog
Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAg
IEluZmVycmVkVHlwZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBl
KiBnZXQoUHJvcGVydHlOYW1lKTsKKworICAgIGVudW0gU3RvcmVkUHJvcGVydHlBZ2UgeworICAg
ICAgICBOZXdQcm9wZXJ0eSwKKyAgICAgICAgT2xkUHJvcGVydHkKKyAgICB9OworICAgIAorICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5IGlz
IHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QKKyAgICAvLyByZWxldmFu
dCBpZiBpdCdzIFRvcC4gTm90ZSB0aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5hbGx5IHBydW5l
IFRvcCBlbnRyaWVzLgorICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKworICAgIC8vIEludmFsaWRhdGVzIHRoZSB0
eXBlIGZvciB0aGUgcHJvcGVydHkuIFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9yZSBpbiBhIHJl
ZmxlY3RpdmUgY29udGV4dC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0eU5hbWUsIFN0
b3JlZFByb3BlcnR5QWdlKTsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGVUYWJsZShWTSYp
OworICAgIH5JbmZlcnJlZFR5cGVUYWJsZSgpOworCisgICAgLy8gQm90dG9tOiBhYnNlbmNlIGZy
b20gdGFibGUuCisgICAgLy8gVG9wOiBudWxsIHZhbHVlIGluIHRhYmxlLCAhdmFsdWUtPmlzUmVs
ZXZhbnQoKSwgb3IgYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vCisgICAgLy8gV2Uga25vdyBo
b3cgdG8gZGV0ZXJtaW5lIGlmIGFic2VuY2UgZnJvbSB0aGUgdGFibGUgaXMgYm90dG9tIG9yIHRv
cCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpcyBwcmVzZW50IGlu
IHRoZSBvd25pbmcgc3RydWN0dXJlLiBIZW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBzdHJ1Y3R1cmUs
IGFic2VuY2UgbWF5IGhhdmUKKyAgICAvLyBkaWZmZXJlbnQgbWVhbmluZ3MuIFRoZSB3YXkgdGhh
dCB0aGlzIGNsYXNzIGRldGVybWluZXMgaWYgdGhlIG93bmluZyBzdHJ1Y3R1cmUga25vd3Mgb2Yg
dGhlIHByb3BlcnR5CisgICAgLy8gaXMgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYWN0
aW9uczogcmVwbGFjZSBvciB0cmFuc2l0aW9uLiBJZiB3ZSdyZSBhZGRpbmcgYSBuZXcgcHJvcGVy
dHkKKyAgICAvLyAodHJhbnNpdGlvbiksIHRoZW4gYWJzZW5jZSBtZWFucyBib3R0b20uIElmIHdl
J3JlIHN0b3JpbmcgdG8gYW4gZXhpc3RpbmcgcHJvcGVydHkgKHJlcGxhY2UsIHRoZW4KKyAgICAv
LyBhYnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUgdG8gd2F0Y2gg
b3V0IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCisgICAgLy8gUzIs
IHNoYXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9mIHRoZW0gaW5p
dGlhbGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5CisgICAgLy8gd2FudCB0byBhZGQg
UCB3aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0aCBhIHR5cGUu
IElmIFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAgIC8vIHRvIGluZGljYXRlIFRvcCwg
dGhlbiBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFuZCB3b3VsZCBl
bmQgdXAgY3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50cnkgaW4gdGhlIHRhYmxlLiBUaGVu
IFMxIHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1c2UgUzIncyB0
eXBlLiBDbGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2ggY29uZnVzaW9u
IGJ5IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVudHJ5LiBIZW5j
ZSwKKyAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8gcGxheSBmb3Ig
cHJvcGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdhcworICAgIC8v
IGNyZWF0ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4s
IFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0
czxVbmlxdWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7CisgICAgCisgICAgVGFibGVUeXBlIG1f
dGFibGU7CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBsb2NrIHdoZW4gd2UncmUgZG9pbmcg
bW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9yIHJlYWRzIG9uIHRoZSBjb21waWxl
cgorICAgIC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVhZCBpcyBub3QgYWxsb3dlZCB0byBk
byBtb2RpZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlVGFibGVfaAorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgIEFT
U0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKICAgICAgICAg
dW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsK
ICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBAIC0xMjI3LDI5ICsxMjI5
LDQwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkp
IHsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAgICAgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgaWYgKG5ld1N0cnVjdHVyZSkgeworICAg
ICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAg
ICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAg
ICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewotICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3Vy
cmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBp
ZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
eworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3Vy
cmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHVuc2ln
bmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICBib29sIGhhc0luZmVycmVkVHlw
ZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50
QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRy
aWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
c3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKGhhc0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3Jl
VmFsdWVGb3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICB9
CisKICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAKQEAgLTEyNjgsMTYgKzEyODEsMTkg
QEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIC8vIHdlIHdh
bnQuCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJy
ZWRXYXRjaHBvaW50RmlyZTsKICAgICAKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbigKKyAgICAgICAg
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29u
dGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlLT53aWxs
U3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAgIAogICAg
IHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7CisgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5l
Y2Vzc2FyeSh2bSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2
YWx1ZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChh
dHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFk
T25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRP
bmx5UHJvcGVydGllcygpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzM1LDggKzEzNTEs
MTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKHN0cnVjdHVy
ZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVyZmx5
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkp
OwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKKyAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZh
bHNlOworICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTEgKzM1MCwx
NSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQog
ICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwog
ICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVu
dHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5t
X29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYg
KHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMu
Z2V0KCkpKQorICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAg
ICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTQ2NCw2ICs0Njgs
NyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNp
dGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0
ID0gc3RydWN0dXJlLT5tX29mZnNldDsKKyAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRh
YmxlLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlw
ZVRhYmxlLmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtNDc5LDYgKzQ4NCwyNCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKKyAgICAvLyBO
T1RFOiBUaGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMgd2h5IHRoaXMgZ29lcyBkaXJlY3RseSB0
byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IHJhdGhlciB0aGFuCisgICAgLy8gY2FjaGluZyB0aGUg
cmVtb3ZhbC4gV2UgY2FuIGZpeCBhbGwgb2YgdGhlc2UgdGhpbmdzLCBidXQgd2UgbXVzdCByZW1l
bWJlciB0byBkbyBzbywgaWYgd2UgZXZlciB0cnkKKyAgICAvLyB0byBvcHRpbWl6ZSB0aGlzIGNh
c2UuCisgICAgLy8KKyAgICAvLyAtIENhY2hlZCB0cmFuc2l0aW9ucyB1c3VhbGx5IHN0ZWFsIHRo
ZSBwcm9wZXJ0eSB0YWJsZSwgYW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMgcG9zc2libGUgYmVjYXVz
ZSB0aGV5CisgICAgLy8gICBjYW4ganVzdCByZWJ1aWxkIHRoZSB0YWJsZSBieSBsb29raW5nIGF0
IHBhc3QgdHJhbnNpdGlvbnMuIFRoYXQgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHRhYmxlIG9ubHkK
KyAgICAvLyAgIGdyZXcgYW5kIG5ldmVyIHNocmFuay4gVG8gc3VwcG9ydCByZW1vdmFscywgd2Un
ZCBoYXZlIHRvIGNoYW5nZSB0aGUgcHJvcGVydHkgdGFibGUgbWF0ZXJpYWxpemF0aW9uCisgICAg
Ly8gICBjb2RlIHRvIGhhbmRsZSBkZWxldGlvbnMuIEFsc28sIHdlIGhhdmUgbG9naWMgdG8gZ2V0
IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgb24gYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vICAgbGFj
a3MgYSBwcm9wZXJ0eSB0YWJsZSBieSBqdXN0IGxvb2tpbmcgYmFjayB0aHJvdWdoIHRoZSBzZXQg
b2YgdHJhbnNpdGlvbnMgc2luY2UgdGhlIGxhc3QKKyAgICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhh
ZCBhIHBpbm5lZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdl
ZCB0byBoYW5kbGUgY2FjaGVkCisgICAgLy8gICByZW1vdmFscy4KKyAgICAvLworICAgIC8vIC0g
SW5mZXJyZWRUeXBlVGFibGUgYXNzdW1lcyB0aGF0IHJlbW92YWwgaGFzIG5ldmVyIGhhcHBlbmVk
LiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSBpZiB3ZSBjb3VsZAorICAgIC8vICAgcmVtb3ZlIGEg
cHJvcGVydHkgYW5kIHRoZW4gcmUtYWRkIGl0IGxhdGVyLCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFu
cyB0b3AiIG9wdGltaXphdGlvbiB3b3VsZG4ndAorICAgIC8vICAgd29yayBhbnltb3JlLCB1bmxl
c3MgcmVtb3ZhbCBhbHNvIGVpdGhlciBwb2lzb25lZCB0eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcg
c29tZXRoaW5nIGVxdWl2YWxlbnQgdG8KKyAgICAvLyAgIGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBi
eSBzdHJvbmdseSBtYXJraW5nIHRoZSBlbnRyeSBhcyBUb3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBp
cyBub3QgYWJzZW50LCBidXQKKyAgICAvLyAgIGluc3RlYWQsIGhhcyBhIG51bGwgZW50cnkuCisg
ICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwog
CiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtODQxLDYgKzg2NCw0MyBAQCB2b2lkIFN0cnVjdHVy
ZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3Bl
cnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCisg
ICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZE9wdGltaXplLAorICAgIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFn
ZSBhZ2UpCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKKyAgICBBU1NFUlQoIWhhZEJl
ZW5EaWN0aW9uYXJ5KCkpOworCisgICAgLy8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxl
IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdl
IGhhdmUgYWxyZWFkeQorICAgIC8vIGdyYWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5
IG1hcC4KKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxl
LmdldCgpOworICAgIGlmICghdGFibGUpIHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVU
YWJsZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlQmFycmllcigpOworICAg
ICAgICBtX2luZmVycmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKwor
ICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNh
bGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29u
ZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhh
dmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisg
ICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5
TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7
CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAg
ZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYWdlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Ao
dm0sIHByb3BlcnR5TmFtZSwgYWdlKTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9
IGZhbHNlOworICAgIH0KK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVy
dHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0x
MDU4LDYgKzExMTgsOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNh
ZmUpOwogICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQog
ICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAog
Ym9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5o
IgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxl
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTVHlwZS5oIgpAQCAtODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5
IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8v
IFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5
cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hl
Y2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVu
dHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBl
KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9w
ZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZz
ZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVy
cmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09
IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0
IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3Bl
cnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJv
b2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJu
YWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhv
bGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVl
IHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ4
MSw2ICs0ODYsNDAgQEAgcHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNo
aW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wg
aGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVy
cmVkVHlwZVRhYmxlOworICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9y
KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBl
VGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0YWJsZS0+Z2V0KHVpZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiBy
ZXN1bHQgPSBpbmZlcnJlZFR5cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQt
PmRlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisg
ICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFy
eSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6TmV3UHJvcGVydHkp
OworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNl
KAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFi
bGU6Ok9sZFByb3BlcnR5KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBl
PiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYg
dGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVz
ZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02MzIsNiArNjcxLDkgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIHZvaWQg
d2lsbFN0b3JlVmFsdWVTbG93KAorICAgICAgICBWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
Ym9vbCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlKTsKKwogICAgIHN0YXRp
YyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0
IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAt
NjU1LDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91
Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90
aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVy
cmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNp
dGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9m
ZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnN0b3JlZFByb3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNs
YXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsK
LSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUp
OwotICAgIGlmICghcHJvcGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
Ci0KLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9w
ZXJ0eU5hbWUudWlkKCkpOwotICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZh
bGlkT2Zmc2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJl
ZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJ
bmZlcnJlZFR5cGUpOwogfQogICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBh
dHRyaWJ1dGVzKQogeworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxX
QVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJl
ZFR5cGUpCit7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3
IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0
dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7
CisgICAgaGFzSW5mZXJyZWRUeXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1
cm4gZW50cnktPm9mZnNldDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNy
ZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQVBJ
VmFsdWVXcmFwcGVyLmgiCkBAIC0yNDEsNiArMjQyLDggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CisgICAgaW5mZXJyZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJyZWRUeXBl
VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgZXhjZXB0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZURlZmVycmVk
U3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiw4IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdl
YWtNYXBEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVT
dHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJlOwor
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gZXhjZXB0aW9uU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21p
c2VEZWZlcnJlZFN0cnVjdHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261243</attachid>
            <date>2015-09-15 15:04:55 -0700</date>
            <delta_ts>2015-09-15 16:21:27 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>172388</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNB
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJB
OEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBG
RkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZF
ODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZC
MUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAw
NzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAv
KiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIg
LyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBC
QUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYw
IC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUy
MTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQv
TExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0
QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
ZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8s
CiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJ
CQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBA
IC00Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8q
IEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2
IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0
NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQx
LDYgKzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1
Mjk2LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyog
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBG
NTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRF
QzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAog
CQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8s
CiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0
NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJ
CQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4
NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZB
OTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1
NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0
OTcsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJ
CQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcx
REQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFC
ODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4Niw2ICs2ODYsOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dl
bmVyYXRpCiAgICAgfQogCiAgICAgY2FzZSBSZXBsYWNlOiB7CisgICAgICAgIGlmIChJbmZlcnJl
ZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkp
CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAg
ICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewogICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLApAQCAtNzA5LDYgKzcx
Miw5IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwog
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRm9yKGlkZW50LmltcGwoKSkpCisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5h
cHBlbmQoaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRl
c2NyaXB0b3IoKSkpOworICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKIAogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0
dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHV0
QnlJZEZsYWdzLmgiCiAKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CkBAIC0zNSwxNiArMzYsMTQgQEAgbmFtZXNwYWNlIFdU
RiB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgUHV0QnlJZEZsYWdzIGZsYWdzKSB7Ci0gICAgU3RyaW5nUHJpbnRTdHJlYW0gc3Ry
aW5nT3V0OwogICAgIENvbW1hUHJpbnRlciBjb21tYSgifCIpOwogICAgIGlmIChmbGFncyAmIFB1
dEJ5SWRJc0RpcmVjdCkKLSAgICAgICAgc3RyaW5nT3V0LnByaW50KGNvbW1hLCAiSXNEaXJlY3Qi
KTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiSXNEaXJlY3QiKTsKIAotICAgIENTdHJpbmcg
c3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOwotICAgIGlmICghc3RyaW5nLmxlbmd0aCgp
KQotICAgICAgICBvdXQucHJpbnQoIk5vbmUiKTsKLSAgICBlbHNlCi0gICAgICAgIG91dC5wcmlu
dChzdHJpbmcpOworICAgIEluZmVycmVkVHlwZTo6S2luZCBraW5kID0gSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoZmxhZ3MpOworICAgIG91dC5wcmludChjb21tYSwga2luZCk7CisgICAgaWYg
KEluZmVycmVkVHlwZTo6aGFzU3RydWN0dXJlKGtpbmQpKQorICAgICAgICBvdXQucHJpbnQoIjoi
LCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRGbGFncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkRmxhZ3MuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyAr
MjYsNzAgQEAKICNpZm5kZWYgUHV0QnlJZEZsYWdzX2gKICNkZWZpbmUgUHV0QnlJZEZsYWdzX2gK
IAorI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKLWVu
dW0gUHV0QnlJZEZsYWdzIHsKK2VudW0gUHV0QnlJZEZsYWdzIDogaW50cHRyX3QgewogICAgIFB1
dEJ5SWROb25lID0gMCwKLSAgICBQdXRCeUlkSXNEaXJlY3QgPSAxCisKKyAgICAvLyBUaGlzIGZs
YWcgaW5kaWNhdGVzIHRoYXQgdGhlIHB1dF9ieV9pZCBpcyBkaXJlY3QuIFRoYXQgbWVhbnMgdGhh
dCB3ZSBzdG9yZSB0aGUgcHJvcGVydHkgd2l0aG91dAorICAgIC8vIGNoZWNraW5nIGlmIHRoZSBw
cm90b3R5cGUgY2hhaW4gaGFzIGEgc2V0dGVyLgorICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDB4MSwK
KyAgICBQdXRCeUlkUGVyc2lzdGVudEZsYWdzTWFzayA9IDB4MSwKKworICAgIC8vIE5PVEU6IFRo
ZSB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBMb3dMZXZlbElu
dGVycHJldGVyLmFzbS4KKworICAgIC8vIERldGVybWluaW5nIHRoZSByZXF1aXJlZCBpbmZlcnJl
ZCB0eXBlIGludm9sdmVzIGZpcnN0IGNoZWNraW5nIHRoZSBwcmltYXJ5IHR5cGUgbWFzaywgYW5k
IHRoZW4KKyAgICAvLyB1c2luZyB0aGF0IHRvIGZpZ3VyZSBvdXQgdGhlIG1lYW5pbmcgb2YgdGhl
IHNlY29uZGFyeSBtYXNrOgorICAgIC8vIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5
cGVNYXNrKSB7CisgICAgLy8gY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6CisgICAg
Ly8gICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAv
LyAgICAgLi4uCisgICAgLy8gICAgIH0KKyAgICAvLyAgICAgYnJlYWs7CisgICAgLy8gY2FzZSBQ
dXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlOgorICAgIC8vIGNhc2UgUHV0QnlJ
ZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgLy8gICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEID0gZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpOworICAgIC8vICAg
ICBicmVhazsKKyAgICAvLyB9CisgICAgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9IDB4NiwKKyAg
ICBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgPSAweDAsIC8vIE5lZWQgdG8gY2hlY2sgdGhl
IHNlY29uZGFyeSB0eXBlIG1hc2sgZm9yIHRoZSB0eXBlLgorICAgIFB1dEJ5SWRQcmltYXJ5VHlw
ZU9iamVjdFdpdGhTdHJ1Y3R1cmUgPSAweDIsIC8vIFNlY29uZGFyeSB0eXBlIGhhcyBzdHJ1Y3R1
cmUgSUQuCisgICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIg
PSAweDQsIC8vIFNlY29uZGFyeSB0eXBlIGhhcyBzdHJ1Y3R1cmUgSUQuCisKKyAgICBQdXRCeUlk
U2Vjb25kYXJ5VHlwZU1hc2sgPSAtMHg4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9t
ID0gMHgwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiA9IDB4OCwKKyAgICBQdXRC
eUlkU2Vjb25kYXJ5VHlwZU90aGVyID0gMHgxMCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUlu
dDMyID0gMHgxOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciA9IDB4MjAsCisgICAg
UHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcgPSAweDI4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0ID0gMHgzMCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIg
PSAweDM4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wID0gMHg0MAogfTsKIAoraW5saW5l
IFB1dEJ5SWRGbGFncyBlbmNvZGVTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRCBpZCkKK3sKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KHN0YXRp
Y19jYXN0PFB1dEJ5SWRGbGFncz4oaWQpIDw8IDMpOworI2Vsc2UKKyAgICBQdXRCeUlkRmxhZ3Mg
cmVzdWx0ID0gYml0d2lzZV9jYXN0PFB1dEJ5SWRGbGFncz4oaWQpOworICAgIEFTU0VSVCghKHJl
c3VsdCAmIH5QdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2VuZGlmCit9CisKK2lubGluZSBTdHJ1Y3R1cmVJRCBkZWNvZGVTdHJ1Y3R1cmVJRChQdXRCeUlk
RmxhZ3MgZmxhZ3MpCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RydWN0dXJlSUQ+KGZsYWdzID4+IDMpOworI2Vsc2UKKyAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFN0cnVjdHVyZUlEPihmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayk7CisjZW5k
aWYKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsK
ICAgICAgICAgCi0gICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1
cmUsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1
Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkp
OwogICAgIH0KIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKTsKQEAgLTEwMyw3ICsxMDMsOCBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1
dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIG9mZnNldCk7CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAor
ICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQsIG5l
d1N0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKIH0KIAogUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgU3R1YkluZm9NYXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKQEAgLTE2Miw3ICsxNjMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2Jq
ZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgfQpAQCAtMTkzLDcgKzE5NCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhzbG93UGF0aFN0YXRlKTsKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHZhcmlhbnQg
PSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAg
LTIwNiw3ICsyMDgsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
CiAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlk
aXR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRo
U3RhdGUpOwogICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3
U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
YWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwg
b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmluZmVy
cmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0zMjksOCArMzMyLDEwIEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAvLyBTbywg
YmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgogICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5
SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCisKKyAgICAgICAgICAgIFB1
dEJ5SWRWYXJpYW50IHZhcmlhbnQgPQorICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojpy
ZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0
b3JGb3IodWlkKSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlh
bnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTM1NiwxMyArMzYxLDE2IEBA
IFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgfQogICAg
IAogICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1
Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUs
IHVpZCwgMCwgb2Zmc2V0KTsKICAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQogICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIEFTU0VSVChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3Vs
dC5hcHBlbmRWYXJpYW50KAotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
c3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgc3RydWN0dXJl
LCB0cmFuc2l0aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpKTsKICAgICAgICAgaWYgKCFk
aWRBcHBlbmQpCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDcgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1f
bmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25kaXRpb25TZXQg
PSBvdGhlci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0Owor
ICAgIG1fcmVxdWlyZWRUeXBlID0gb3RoZXIubV9yZXF1aXJlZFR5cGU7CiAgICAgaWYgKG90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CiAgICAgZWxz
ZQpAQCAtNTIsMTggKzUzLDIxIEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3Bl
cmF0b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCitQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKKyAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25z
dCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlk
VmFyaWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CiAgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24o
CiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwpAQCAtNzEsNiAr
NzUsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiAgICAgcmVz
dWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOwogICAgIHJlc3VsdC5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
cmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTg1LDYgKzkwLDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNl
dHRlcigKICAgICByZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RG
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKTsKKyAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUgPSBJbmZl
cnJlZFR5cGU6OlRvcDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMzQsOSArMTQwLDEy
IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKIHsKICAgICBpZiAo
bV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChtX3JlcXVpcmVkVHlwZSAhPSBvdGhlci5tX3JlcXVpcmVkVHlwZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBSZXBsYWNl
OgorICAgIGNhc2UgUmVwbGFjZTogewogICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewog
ICAgICAgICBjYXNlIFJlcGxhY2U6IHsKICAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNl
dC5pc0VtcHR5KCkpOwpAQCAtMTU4LDYgKzE2Nyw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0
dGVtcHRUb01lcmdlKGNvbnMKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQorICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBUcmFuc2l0aW9uOgog
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewpAQCAtMjEwLDE0ICsyMjAsMTUgQEAgdm9p
ZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICAKICAgICBjYXNl
IFJlcGxhY2U6CiAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwg
aW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CisgICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5cGUoKSwK
KyAgICAgICAgICAgICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBU
cmFuc2l0aW9uOgogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246
ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAg
ICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIs
Ci0gICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRp
b25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVk
VHlwZSgpLCAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVy
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTEgQEAgcHVi
bGljOgogICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0
QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3Rh
dGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlP
ZmZzZXQpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVy
ZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsK
ICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAot
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0
KTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9m
ZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgc3RhdGlj
IFB1dEJ5SWRWYXJpYW50IHNldHRlcigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJv
cGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKQEAgLTk5LDYg
Kzk5LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwogICAgIH0K
IAorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciByZXF1aXJlZFR5cGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUeXBlOworICAgIH0KKwogICAgIGJvb2wgd3Jp
dGVzU3RydWN0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29u
c3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CkBAIC0xMzAsNiArMTM1LDcgQEAgcHJp
dmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwogICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX3JlcXVpcmVkVHlwZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNp
bmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlBhcnNl
ck1vZGVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgi
CiAjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKICNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5oIgpAQCAtOTgsMTIgKzk3LDEwIEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0
aW9uIHsKICAgICBVbmxpbmtlZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAg
VW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7
IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9w
ZXJhbmQ7IH0KLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKFB1dEJ5SWRGbGFncyBmbGFncykgeyB1
LnB1dEJ5SWRGbGFncyA9IGZsYWdzOyB9CiAgICAgdW5pb24gewogICAgICAgICBPcGNvZGVJRCBv
cGNvZGU7CiAgICAgICAgIGludDMyX3Qgb3BlcmFuZDsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7
Ci0gICAgICAgIFB1dEJ5SWRGbGFncyBwdXRCeUlkRmxhZ3M7CiAgICAgfSB1OwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAg
Ly8gTm90ZSB0aGF0IGZvciBhbnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUg
REZHLCBpdCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisg
ICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAg
ICAvLworICAgIC8vIENvbmN1cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAg
IC8vCisgICAgLy8gaWYgKHcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0
aW1pemF0aW9uczsKKyAgICAvLyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJl
dHJ5IGNvbXBpbGF0aW9uOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3Jp
dGhtIGlzIHdpZGVzcHJlYWQsIGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFs
aWRhdGUoKSB3aWxsIGxlYXZlCisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZh
bGlkKCkgc3RhdGUuIEhlbmNlLCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVh
dmVkIGJldHdlZW4KKyAgICAvLyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRo
ZSBzZWNvbmQgb25lLCB0aGVuIGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5
CisgICAgLy8gY29tcGlsYXRpb24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBj
aGFuZ2Ugc29tZSBwaWVjZSBvZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9y
LCBidXQgaW52YWxpZGF0ZSB0aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8v
CisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkK
KyAgICAvLworICAgIC8vIHRoZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGlu
dmFsaWRhdGVkIHN0YXRlIGJldHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBU
aGVyZSBhcmUgdHdvIHdheXMgdG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0g
Q2FsbCBmaXJlQWxsKCkgd2l0aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRo
ZSBERkcgd2lsbCBrbm93IHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGlu
dmFsaWRhdGVkIHdoZW4gaXQgZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8g
LSBEbyBub3QgZXhwb3NlIHRoZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBh
bmQgaGF2ZSB5b3VyIG93biB3YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUg
YXNzdW1wdGlvbnMgdGhhdCB0aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVu
IHRoZSBERkcgY29kZSBpcyBpbnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExMiw3ICsyMTEyLDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRCeQogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsgLy8gb2Zmc2V0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAv
LyBuZXcgc3RydWN0dXJlCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBzdHJ1Y3R1
cmUgY2hhaW4KLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUHV0QnlJZE5vbmUpOyAvLyBpcyBu
b3QgZGlyZWN0CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0YXRpY19jYXN0PGludD4oUHV0
QnlJZE5vbmUpKTsgLy8gaXMgbm90IGRpcmVjdAogCiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAt
MjEzNCw3ICsyMTM0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJl
YwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gb2Zmc2V0CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOyAvLyBuZXcgc3RydWN0dXJlCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKDApOyAvLyBzdHJ1Y3R1cmUgY2hhaW4gKHVudXNlZCBpZiBkaXJlY3QpCi0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwg
cHJvcGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5
SWRJc0RpcmVjdCA6IFB1dEJ5SWROb25lKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Rh
dGljX2Nhc3Q8aW50PigocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8IHBy
b3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRCeUlk
SXNEaXJlY3QgOiBQdXRCeUlkTm9uZSkpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOSArMTE2LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQpCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNw
ZWNOb25lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQp
OworICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCwgYWRtaXR0ZWRUeXBl
cyk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xMzksNyArMTM5
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmlsdGVyQnlWYWx1ZShmb3JOb2RlKG5vZGUp
LCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3Ry
YWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5cGUg
YWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFy
cmF5TW9kZXMoQWJzdHJhY3RWYWx1ZSYsIEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1
bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFsdWUmLCBGcm96ZW5WYWx1ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4MjksMTAgKzE4MjksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0
dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkKKyAgICAgICAg
aWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkKICAgICAgICAgICAgICYmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2Vs
bCkpKSB7Ci0gICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIG1f
Z3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKKyAgICAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+
aWRlbnRpZmllck51bWJlcigpXTsKKyAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0g
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcih2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkKTsK
ICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgIC8v
IEZpZ3VyZSBvdXQgd2hhdCB0aGUgcmVzdWx0IGlzIGdvaW5nIHRvIGJlIC0gaXMgaXQgVE9QLCBh
IGNvbnN0YW50LCBvciBtYXliZQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1
YnRsZT8KQEAgLTE4NDEsMjIgKzE4NDEsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0IGdp
dmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3ZSdk
CiAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCiAgICAg
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNvbmRp
dGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAg
ICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZv
clByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCB1aWQsIHN0YXR1
c1tpXS5vZmZzZXQoKSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0g
MSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSBy
ZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xODgwLDcg
KzE4NzAsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUu
bV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVh
ZHkgZW5zdXJlZCB0aGlzLgogCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3Ry
dWN0dXJlU2V0KCk7CiAgICAgICAgIApAQCAtMTg4OCwxMiArMTg3NywyMyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRoYXQgaW5jbHVkZXMg
dGhlIHNldCB3ZSdyZSB0ZXN0aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUgc3Ry
dWN0dXJlIGNoZWNrCiAgICAgICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkgZG9u
J3QuCiAgICAgICAgIAotICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihz
ZXQpKSB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAg
ICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworCisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAg
ICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3Bl
Y090aGVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAg
IAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCwgYWRtaXR0ZWRUeXBlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMDg0LDEzICsyMDg0LDI5IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9m
ZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25z
dGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBkYXRhLm9mZnNldCk7Ci0gICAg
ICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBo
LmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVt
YmVyXTsKKworICAgICAgICAvLyBGSVhNRTogVGhlIHBhcnQgb2YgdGhpcyB0aGF0IGhhbmRsZXMg
aW5mZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVsaWVzIG9uIEFJIGtub3dpbmcgdGhlIHN0cnVjdHVy
ZQorICAgICAgICAvLyByaWdodCBub3cuIFRoYXQncyBwcm9iYWJseSBub3Qgb3B0aW1hbC4gSW4g
c29tZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0gYW4gb3B0aW1pemF0aW9uICh1c3VhbGx5CisgICAg
ICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuIEFJLCBtYXliZSBieSBDU0UgZm9yIGV4YW1w
bGUpIHRoYXQgb2JzY3VyZXMgQUkncyB2aWV3IG9mIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8g
YXQgdGhlIHBvaW50IHdoZXJlIEdldEJ5T2Zmc2V0IHJ1bnMuIEN1cnJlbnRseSwgd2hlbiB0aGF0
IGhhcHBlbnMsIHdlJ2xsIGhhdmUgdG8gcmVseSBlbnRpcmVseQorICAgICAgICAvLyBvbiB0aGUg
dHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIHdhcyBhYmxlIHRvIHByb3ZlLgorICAgICAgICBBYnN0
cmFjdFZhbHVlIHZhbHVlID0gbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgdWlkLCBkYXRhLm9mZnNldCwgbV9zdGF0
ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisKKyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0
aGF0IHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIgY2FtZSB1cCB3aXRoIGlzIGJldHRlci4K
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlRnJvbVBhcnNpbmc7CisgICAgICAgIHR5cGVGcm9t
UGFyc2luZy5zZXQobV9ncmFwaCwgZGF0YS5pbmZlcnJlZFR5cGUsIG1fc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkpOworICAgICAgICB2YWx1ZS5maWx0ZXIodHlwZUZyb21QYXJzaW5nKTsK
KworICAgICAgICAvLyBJZiB3ZSBkZWNpZGUgdGhhdCB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbnkg
dmFsdWUgdGhhdCB0aGlzIGNhbiByZXR1cm4sIHRoZW4gaXQncyBwcm9iYWJseQorICAgICAgICAv
LyBiZWNhdXNlIHRoZSBjb21waWxhdGlvbiB3YXMgYWxyZWFkeSBpbnZhbGlkYXRlZC4KKyAgICAg
ICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChm
YWxzZSk7CisKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBpZiAodmFs
dWUubV92YWx1ZSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMTIwLDYgKzIxMzYsOCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIGJlY2F1
c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRpbWVzLCBidXQgdGhpcyBub2RlIGlzIEZUTC1v
bmx5LgogICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAK
KyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXJdOworCiAgICAgICAg
IEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBT
dHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CkBAIC0y
MTI5LDE4ICsyMTQ3LDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6
OkNvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZ2V0Q2FzZS5tZXRo
b2QoKS5raW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0
YW50OiB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAg
ICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLAor
ICAgICAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAorICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUg
dGhpc1Jlc3VsdDsKLSAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAg
IG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwK
LSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXQsIHVpZCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZSht
X2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0aW9uKQpAQCAtMjE2Myw2ICsyMTkyLDggQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUg
b3JpZ2luYWxWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBBYnN0cmFj
dFZhbHVlIHJlc3VsdGluZ1ZhbHVlOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKQEAgLTIxNzAsNiArMjIwMSwxMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB0aGlzU2V0
LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlmICh0aGlzU2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFs
dWUgPSBvcmlnaW5hbFZhbHVlOworICAgICAgICAgICAgdGhpc1ZhbHVlLmZpbHRlcihtX2dyYXBo
LCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1l
cmdlKHRoaXNWYWx1ZSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIGlm
ICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZCgKQEAgLTIxODUsNiArMjIyMSw5
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgb2Jz
ZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1pdCwgdHJhbnNpdGlvbnMpOwogICAgICAgICBpZiAo
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkg
PT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7
CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpID0gcmVzdWx0aW5nVmFsdWU7CisgICAg
ICAgIGlmICghIW9yaWdpbmFsVmFsdWUgJiYgIXJlc3VsdGluZ1ZhbHVlKQorICAgICAgICAgICAg
bV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKQEAgLTIyNjQsMTMgKzIzMDMsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVj
dDogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1f
c3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJl
LmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgIHZhbHVlLm1fc3Ry
dWN0dXJlLnNldCgpLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0
QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1Np
bXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAg
ICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5zaXRpb25zOwpAQCAtMjYxNSw5ICsyNjU0LDkg
QEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlcigKLSAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUs
IGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQog
ewotICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0KSA9PSBGaWx0cmF0aW9uT0spCisg
ICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQsIGFkbWl0dGVkVHlwZXMpID09IEZpbHRy
YXRpb25PSykKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKICAgICBtX3N0YXRlLnNldElz
VmFsaWQoZmFsc2UpOwogICAgIHJldHVybiBDb250cmFkaWN0aW9uOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxODk4
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDU2IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0
VHlwZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKK3ZvaWQgQWJz
dHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQoreworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBjbGVhcigpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIHNldFR5cGUo
U3BlY0Jvb2xlYW4pOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90
aGVyOgorICAgICAgICBzZXRUeXBlKFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHNldFR5cGUoU3BlY0ludDMyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHNl
dFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHNldChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgIG1lcmdlKFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVj
T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RP
ck90aGVyOgorICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG1h
a2VIZWFwVG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldCgKKyAgICBHcmFw
aCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBzZXQoZ3JhcGgsIGRlc2Ny
aXB0b3IpOworICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkK
KyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKK30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpm
aXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmIGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVzZW50
YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKHJlcHJlc2VudGF0aW9uID09IE5vZGVSZXN1
bHREb3VibGUpIHsKQEAgLTE4OSw4ICsyMzksMjIgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjptZXJn
ZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBvbGRNZSAhPSAqdGhpczsKIH0KIAotRmlsdHJh
dGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIG90aGVyKQorYm9vbCBBYnN0cmFjdFZhbHVlOjppc1R5cGUoR3JhcGgmIGdyYXBo
LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSkgY29uc3QKIHsK
KyAgICBBYnN0cmFjdFZhbHVlIHR5cGVWYWx1ZTsKKyAgICB0eXBlVmFsdWUuc2V0KGdyYXBoLCBp
bmZlcnJlZFR5cGUpOworCisgICAgQWJzdHJhY3RWYWx1ZSBtZXJnZWRWYWx1ZSA9ICp0aGlzOwor
ICAgIG1lcmdlZFZhbHVlLm1lcmdlKHR5cGVWYWx1ZSk7CisKKyAgICByZXR1cm4gbWVyZ2VkVmFs
dWUgPT0gdHlwZVZhbHVlOworfQorCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZp
bHRlcigKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIsIFNwZWN1
bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCit7CisgICAgQVNTRVJUKCEoYWRtaXR0ZWRUeXBlcyAm
IFNwZWNDZWxsKSk7CisgICAgCiAgICAgaWYgKGlzQ2xlYXIoKSkKICAgICAgICAgcmV0dXJuIEZp
bHRyYXRpb25PSzsKICAgICAKQEAgLTE5OCw3ICsyNjIsNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgLy8gaGF2aW5nIHN0cnVjdHVyZXMsIGFycmF5IG1v
ZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDk2NjMKICAgICAKLSAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlcygpOworICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmVzKCkgfCBhZG1pdHRlZFR5cGVzOwogICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhl
ci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKICAgICBtX3N0cnVjdHVyZS5maWx0ZXIob3Ro
ZXIpOwogICAgIApAQCAtMzE1LDYgKzM3OSwxMyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0
VmFsdWU6OmZpbHRlcihjCiAgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CiB9CiAKK0ZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEFic3RyYWN0VmFsdWUgZmls
dGVyVmFsdWU7CisgICAgZmlsdGVyVmFsdWUuc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICBy
ZXR1cm4gZmlsdGVyKGZpbHRlclZhbHVlKTsKK30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8gV2UgY291bGQgZ28gZnVydGhlciwgYW5kIGVuc3Vy
ZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdz
LmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRG
R1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAi
RHVtcENvbnRleHQuaCIKQEAgLTIxNCw3ICsyMTUsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImKTsKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CisKICAgICB2b2lkIGZpeFR5
cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9k
ZSogPSBudWxscHRyKTsKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYs
IE5vZGUqKTsKICAgICAKQEAgLTI4MCwxNyArMjg0LDI3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICB7CiAgICAgICAgIHJldHVybiAhKG1fdHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAg
fQorCisgICAgYm9vbCBpc1R5cGUoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImKSBjb25zdDsKKworICAgIC8vIEZpbHRlcnMgdGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBz
dHJ1Y3R1cmUgc2V0LiBJZiB0aGUgYWRtaXR0ZWRUeXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2Vk
LCB0aGlzCisgICAgLy8gaW1wbGljaXRseSBmaWx0ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5
IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3aGljaCBhcmUgdXN1YWxseSBhIHN1YnNldCBvZgorICAgIC8v
IFNwZWNDZWxsLiBIZW5jZSwgYWZ0ZXIgdGhpcyBjYWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25n
ZXIgaGF2ZSBhbnkgbm9uLWNlbGwgbWVtYmVycy4gQnV0LCB5b3UgY2FuCisgICAgLy8gdXNlIGFk
bWl0dGVkVHlwZXMgdG8gcHJlc2VydmUgc29tZSBub24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0IGl0
J3Mgd3JvbmcgZm9yIGFkbWl0dGVkVHlwZXMgdG8gb3ZlcmxhcAorICAgIC8vIHdpdGggU3BlY0Nl
bGwuCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIAotICAg
IEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAg
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMpOwogICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVuVmFsdWUmIHZhbHVlKTsKICAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihjb25zdCBBYnN0cmFjdFZhbHVlJik7CisKKyAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwog
ICAgIAogICAgIEZpbHRyYXRpb25SZXN1bHQgY2hhbmdlU3RydWN0dXJlKEdyYXBoJiwgY29uc3Qg
U3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25z
dDsKLSAgICAKKwogICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7
CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA2LDkgKzIwNiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5
Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5
cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5j
dGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwotICAgIE5vZGUqIGhhbmRs
ZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zm
c2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRl
ZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0
eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlUHV0QnlP
ZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwogCiAgICAgLy8gQ3JlYXRlIGEgcHJlc2Vu
Y2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYmFzZWQgb24gc29tZSBrbm93biBvZmZzZXQgYW5k
IHN0cnVjdHVyZSBzZXQuIERvZXMgbm90CiAgICAgLy8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRo
ZSBjb25kaXRpb24sIGJ1dCBpdCBtYXkgcmV0dXJuIGEgbnVsbCBvbmUgaWYgaXQgZW5jb3VudGVy
cyBhIGNvbnRyYWRpY3Rpb24uCkBAIC0yMzA3LDcgKzIzMDYsOSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9m
ZnNldCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsIE5vZGVUeXBlIG9wKQogewogICAg
IE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkK
QEAgLTIzMTgsMTMgKzIzMTksMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5
T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5
cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgCiAgICAgTm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRUb0dy
YXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdl
LCBiYXNlKTsKIAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0KIAotTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCitOb2RlKiBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlPZmZzZXQoCisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Im
IGluZmVycmVkVHlwZSwKKyAgICBOb2RlKiB2YWx1ZSkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0
b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzM1LDYgKzIzMzks
NyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCiAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAg
ICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBp
ZGVudGlmaWVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAgICAK
ICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSks
IHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgIApAQCAtMjQ0OSw3ICsyNDU0LDgg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3RhbnQoKSkpOwogICAgIGNhc2UgR2V0QnlP
ZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CiAgICAgICAgIE5vZGUqIGJhc2VOb2Rl
ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7Ci0g
ICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRl
bnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBvcCk7CisgICAgICAgIHJldHVybiBoYW5k
bGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlm
aWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIEluZmVycmVkVHlwZTo6VG9wLCBvcCk7CiAgICAg
fQogICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CiAgICAgICAgIC8vIFdpbGwgbmV2
ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgpAQCAtMjU1NSwxMyArMjU2MSwxMyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAKICAgICBib29sIG5lZWRTdHJ1Y3R1cmVDaGVj
ayA9IHRydWU7CiAgICAgCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRl
bnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAKICAgICBpZiAoSlNPYmplY3QqIGtu
b3duQmFzZSA9IGJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7CiAgICAg
ICAgIC8vIFRyeSB0byBvcHRpbWl6ZSBhd2F5IHRoZSBzdHJ1Y3R1cmUgY2hlY2suIE5vdGUgdGhh
dCBpdCdzIG5vdCB3b3J0aCBkb2luZyBhbnl0aGluZyBhYm91dCB0aGlzCiAgICAgICAgIC8vIGlm
IHRoZSBiYXNlJ3Mgc3RydWN0dXJlIGlzIHdhdGNoZWQuCiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZS0+Y29uc3RhbnQoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKSB7Ci0gICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIGxvYWRpbmcgZnJv
bSBhIHByb3RvdHlwZS4gV2UgZXhwZWN0IHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZQogICAgICAg
ICAgICAgICAgIC8vIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gaWYgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZQpAQCAtMjYyNiw5ICsyNjMyLDE2
IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgaWYgKGNvbnN0YW50
KQogICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CiAgICAg
ICAgIH0KKworICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlOwor
ICAgICAgICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKSB7CisgICAgICAgICAgICBmb3IgKFN0cnVj
dHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkKKyAgICAgICAgICAgICAg
ICBpbmZlcnJlZFR5cGUubWVyZ2UobV9ncmFwaC5pbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1
Y3R1cmUsIHVpZCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluZmVycmVkVHlwZSA9
IEluZmVycmVkVHlwZTo6VG9wOwogICAgICAgICAKICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5k
bGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBsb2FkT3ApOworICAgICAgICAgICAgbG9hZFBy
ZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGluZmVy
cmVkVHlwZSwgbG9hZE9wKTsKICAgICB9CiAKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CkBAIC0y
NjM5LDcgKzI2NTIsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwg
CiAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2UpOwogCiAgICAgY2hlY2tQcmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVy
cygpW2lkZW50aWZpZXJdLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsK
LSAgICByZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5v
ZmZzZXQoKSwgdmFsdWUpOworICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVu
dGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpLCB2YWx1ZSk7
CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRl
ICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luZmVycmVkVHlwZUNo
ZWNrLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC0zNzMsNyArMzc0LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25s
eVN0cnVjdHVyZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5yZXF1aXJlZFR5cGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0OCw2ICs0
NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2lu
ZCgpID09IENlbGxVc2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpOwogCiAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5C
bG9jayk7IC8vIFB1c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUg
YmVmb3JlLgogICAgICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgpA
QCAtNDYzLDcgKzQ2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm51bVZh
cmlhbnRzKCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
bnVtVmFyaWFudHMoKSA+IDEgJiYgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQpAQCAtNjY2
LDYgKzY2OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hp
bGQxKCk7CiAgICAgICAgIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2Rl
LCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICBpbnNlcnRJbmZl
cnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ss
IG9yaWdpbiwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsK
IAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAg
ICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlw
ZV9oCisjZGVmaW5lIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRz
IHRoZSBERkcncyBleHBlY3RhdGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHks
IHRoYXQgd2Ugd2FudCBpdCB0byBoYXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBh
bmQgdGhhdCB0aGlzIG9iamVjdCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4K
KworY2xhc3MgRGVzaXJlZEluZmVycmVkVHlwZSB7CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVy
cmVkVHlwZSgpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAg
IAorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZXhwZWN0ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2Jq
ZWN0KQorICAgICAgICAsIG1fZXhwZWN0ZWQoZXhwZWN0ZWQpCisgICAgeworICAgIH0KKworICAg
IERlc2lyZWRJbmZlcnJlZFR5cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICA6IG1fb2JqZWN0KG51bGxwdHIpCisgICAgICAgICwgbV9leHBlY3RlZChJbmZlcnJlZFR5
cGU6OlRvcCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlw
ZSogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3IgZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAg
ICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmpl
Y3QtPmNhbldhdGNoKG1fZXhwZWN0ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9p
bnQqIHdhdGNocG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hw
b2ludCh3YXRjaHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9v
YmplY3QgPT0gb3RoZXIubV9vYmplY3QKKyAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3Ro
ZXIubV9leHBlY3RlZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0g
SW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEluZmVycmVkVHlwZSo+OjpoYXNoKG1f
b2JqZWN0KSArIG1fZXhwZWN0ZWQuaGFzaCgpICogNzsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cisg
ICAgeworICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQsIGNvbnRleHQpLCAi
IGZvciAiLCBSYXdQb2ludGVyKG1fb2JqZWN0KSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwg
bnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZSogbV9vYmplY3Q7
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Cit9OworCitzdHJ1Y3Qg
RGVzaXJlZEluZmVycmVkVHlwZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEsIGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6RGVz
aXJlZEluZmVycmVkVHlwZUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6
RGVzaXJlZEluZmVycmVkVHlwZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkRl
c2lyZWRJbmZlcnJlZFR5cGU+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1
LDExIEBAIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjoKICAgICB9CiB9
CiAKK3ZvaWQgSW5mZXJyZWRUeXBlQWRhcHRvcjo6YWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAg
ICBrZXkuYWRkKGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKIERlc2ly
ZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2lu
dHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIApAQCAtOTMsNiArOTgsMTEgQEAgdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdAogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1
cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRk
TGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKK3sKKyAgICBtX2luZmVycmVk
VHlwZXMuYWRkTGF6aWx5KGtleSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25z
aWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hv
dWxkV2F0Y2goKSkKQEAgLTEwOCw2ICsxMTgsNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
cmVhbGx5QWRkKENvZGVCCiAgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNv
bW1vbkRhdGEpOwogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxv
Y2ssIGNvbW1vbkRhdGEpOworICAgIG1faW5mZXJyZWRUeXBlcy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFs
aWQoKSBjb25zdApAQCAtMTE2LDcgKzEyNyw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjph
cmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQog
ICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBt
X2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0
dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCk7CisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVT
ZXRzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2luZmVycmVkVHlwZXMuYXJlU3RpbGxW
YWxpZCgpOwogfQogCiB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKQEAgLTEyNyw2ICsxMzks
NyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQCiAgICAgb3V0LnBy
aW50KCIgICAgSW5mZXJyZWQgdmFsdWVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFZhbHVlcywg
Y29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIEJ1ZmZlciB2aWV3czogIiwgaW5D
b250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAg
ICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250ZXh0KG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQg
dHlwZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVHlwZXMsIGNvbnRleHQpLCAiXG4iKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAj
aW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1ZGUgIkRGR0Rlc2lyZWRJbmZlcnJlZFR5
cGUuaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clZpZXcuaCIKICNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgpAQCAtOTEsNiAr
OTIsMTggQEAgc3RydWN0IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0bwogICAgIH0K
IH07CiAKK3N0cnVjdCBJbmZlcnJlZFR5cGVBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYsIENvbW1vbkRhdGEmKTsKKyAg
ICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlw
ZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFrZXkuaXNTdGlsbFZhbGlkKCk7CisgICAg
fQorICAgIHN0YXRpYyB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7Cisg
ICAgICAgIG91dC5wcmludChpbkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CisgICAgfQorfTsKKwog
dGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBT
ZXRQb2ludGVyQWRhcHRvcjxXYXRjaHBvaW50U2V0VHlwZT4+CiBjbGFzcyBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNTksNiArMTcyLDEwIEBA
IHB1YmxpYzoKICAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhp
cyBkaXJlY3RseS4gVXNlIEdyYXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2VzCiAgICAg
Ly8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29ra2VlcGlu
Zy4KICAgICB2b2lkIGFkZExhemlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOwor
CisgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0
bHkuIFVzZSBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUg
cmVxdWlyZWQgR0MgbWFnaWMuCisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYpOwogICAgIAogICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCkBA
IC0xODYsNiArMjAzLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkYXB0
aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNo
ZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faW5mZXJyZWRUeXBlcy5pc1dhdGNoZWQoa2V5KTsKKyAgICB9CiAKICAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtMTk2LDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAg
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFk
YXB0b3I+IG1faW5mZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxK
U0FycmF5QnVmZmVyVmlldyosIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1
ZmZlclZpZXdzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlD
b25kaXRpb24sIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVT
dHJ1Y3R1cmVTZXRzOworICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RGVzaXJlZEluZmVy
cmVkVHlwZSwgSW5mZXJyZWRUeXBlQWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmgiCkBAIC0xMDkyLDYgKzEwOTMsOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgaW5z
ZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG1f
aW5kZXhJbkJsb2NrLCBub2RlLT5vcmlnaW4sIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKKyAgICAg
ICAgICAgICAgICBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAgICAg
ICAgICAgICBzcGVjdWxhdGVGb3JCYXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Nyw2ICs4ODcsMzkgQEAgYm9vbCBHcmFwaDo6
aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29u
dGFpbnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYg
a2V5KQoreworICAgIGFzc2VydElzUmVnaXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOworICAgIAor
ICAgIGF1dG8gaXRlciA9IG1faW5mZXJyZWRUeXBlcy5maW5kKGtleSk7CisgICAgaWYgKGl0ZXIg
IT0gbV9pbmZlcnJlZFR5cGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisK
KyAgICBJbmZlcnJlZFR5cGUqIHR5cGVPYmplY3QgPSBrZXkuc3RydWN0dXJlKCktPmluZmVycmVk
VHlwZUZvcihrZXkudWlkKCkpOworICAgIGlmICghdHlwZU9iamVjdCkgeworICAgICAgICBtX2lu
ZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1cm4g
SW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IHR5cGVEZXNjcmlwdG9yID0gdHlwZU9iamVjdC0+ZGVzY3JpcHRvcigpOworICAgIGlmICh0eXBl
RGVzY3JpcHRvci5raW5kKCkgPT0gSW5mZXJyZWRUeXBlOjpUb3ApIHsKKyAgICAgICAgbV9pbmZl
cnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIElu
ZmVycmVkVHlwZTo6VG9wOworICAgIH0KKyAgICAKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtl
eSwgdHlwZURlc2NyaXB0b3IpOworCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemls
eSh0eXBlT2JqZWN0KTsKKyAgICBpZiAodHlwZURlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAg
ICAgIHJlZ2lzdGVyU3RydWN0dXJlKHR5cGVEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKworICAg
IC8vIE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0aGlzIGRlc2lyZWQgaW5m
ZXJyZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1heQorICAgIC8vIHBvaW50
IHRvIHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KKyAgICBtX3BsYW4ud2F0Y2hwb2lu
dHMuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlwZURlc2NyaXB0
b3IpKTsKKworICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKK30KKwogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAg
LTEwNjEsNyArMTA5NCw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHko
SlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBi
YXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlz
Q2xvYmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAg
ICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2Ug
Y291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8g
Y29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTEwOSwzNyBAQCBKU1Zh
bHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENv
bnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwog
fQogCitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0
OworICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
eworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNl
dCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIGlmIChjbG9iYmVy
U3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgcmVzdWx0LmNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJhY3RWYWx1ZSBHcmFw
aDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIGlmIChKU1ZhbHVlIHZh
bHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQpKSB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0aGlzLCAqZnJlZXplKHZh
bHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm4gaW5mZXJy
ZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCwgY2xvYmJlclN0
YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9wKCk7Cit9CisKIEpTVmFs
dWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVlIGJhc2UsIFNjb3BlT2Zm
c2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21lIGNvbmN1cnJlbmN5IHN0
b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVDb2RlUGFyc2VyLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg5ODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRG
R1BsYW4uaCIKICNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisjaW5jbHVkZSAiREZH
UHJvcGVydHlUeXBlS2V5LmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAi
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCkBAIC02NzUsNiAr
Njc2LDIxIEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRp
bmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhp
cyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJh
Y2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0
KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBUZWxscyB1cyB3aGF0IGluZmVycmVk
IHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3BlcnR5IHRvIGhhdmUgbm93IGFuZCBp
biB0aGUgZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVG
b3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVHlwZUZvcihQcm9w
ZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICB9CisKKyAgICBBYnN0cmFjdFZhbHVl
IGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworCisg
ICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0eSBpbmZlcmVuY2Ugb3IgcHJv
cGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBhYnN0cmFjdAorICAgIC8vIHZh
bHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhlIGdpdmVuIGFic3RyYWN0IHZh
bHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisg
ICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQs
IFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwogICAgIAogICAgIEZ1bGxC
eXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsKICAgICBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7CkBAIC04NTYsNiArODcy
LDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1
bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIEhhc2hNYXA8Q29k
ZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBtX2J5dGVjb2RlS2lsbHM7
CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0eU9mZnNldD4+IG1fc2Fm
ZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtleSwgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7CiAg
ICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7CiAgICAgTmF0dXJhbExvb3Bz
IG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZl
cnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0luZmVycmVkVHlwZUNoZWNrLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2VydEluZmVycmVkVHlwZUNo
ZWNrKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1bnNpZ25lZCBub2RlSW5kZXgs
IE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwKKyAgICBjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgeworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgb3JpZ2luKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVk
Z2UoYmFzZU5vZGUsIEJvb2xlYW5Vc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2Rl
SW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBPdGhlclVzZSkp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBv
cmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEludDMyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIE51
bWJlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3Ry
aW5nOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25l
LCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBTdHJpbmdVc2UpKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbnNlcnRp
b25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpLAorICAgICAg
ICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
Q2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQu
Z3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAg
RWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT2Jq
ZWN0VXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNw
ZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBPYmplY3RPck90aGVyVXNlKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0goaW5zZXJ0aW9uU2V0LmdyYXBoKCksIGJh
c2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJyZWRUeXBlQ2hlY2tfaAorI2RlZmluZSBE
RkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEluc2VydHMgYSB0eXBlIGNoZWNrIHRoYXQg
ZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2ZW4gaW5mZXJyZWQgdHlwZS4KK3ZvaWQg
aW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0aW9uU2V0JiwgdW5zaWduZWQgbm9k
ZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5mZXJyZWRUeXBlQ2hlY2tfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYg
KzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
cjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUgaW5mZXJyZWQgdHlwZS4gRm9yIHB1
dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byByZW1lbWJlcgorICAgIC8v
IHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVz
ZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlwZSBpcworICAgIC8vIGd1YXJhbnRl
ZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZTsKIH07CiAKIHN0
cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMzUsMTQg
KzIxMzUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlIDogc3RydWN0dXJlcykgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAob2Zmc2V0ICE9IGN1cnJlbnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEJlY2F1c2Ugb3VyIGFuYWx5c2lzIHRyZWF0cyBNdWx0aVB1dEJ5T2Zmc2V0IGxp
a2UgYW4gZXNjYXBlLCB3ZSBvbmx5IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGRlYWwgd2l0aCBzdG9yaW5nIHJlc3VsdHMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcHJldmlvdXNs
eSBzdG9yZWQgYnkgUHV0QnlPZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVz
LiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHR5cGUgY2hlY2tz
LiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9p
bnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcgdmFsdWUgaGFzIHRoZSBy
aWdodCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igd2hhdGV2ZXIgc3RydWN0
dXJlIHdlIGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRz
LmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwg
SW5mZXJyZWRUeXBlOjpUb3ApKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZz
ZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmNsZWFyKCk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5h
ZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGF0YS0+
dmFyaWFudHMuYXBwZW5kKFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJl
bnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoCisgICAg
ICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJl
bnRPZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNkZWZpbmUgREZHUHJvcGVydHlUeXBl
S2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmluZGluZyBhIHByb3BlcnR5J3MgdHlw
ZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVuaXF1ZWRTdHJpbmdJbXBsKi4KKwor
Y2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVR5cGVLZXkoKQor
ICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV91aWQobnVsbHB0cikK
KyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVy
ZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKworICAgIFByb3BlcnR5VHlw
ZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9zdHJ1Y3R1
cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVkVUlEKCkpCisgICAgeworICAgIH0K
KworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVy
ZSAmJiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJl
dHVybiBtX3VpZDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFByb3BlcnR5VHlwZUtl
eSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3Ro
ZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdWlkID09IG90aGVyLm1fdWlkOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6UHRy
SGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgKyBXVEY6OlB0ckhhc2g8VW5pcXVl
ZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCk7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJl
ICYmIG1fdWlkID09IGRlbGV0ZWRVSUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgewor
ICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRl
eHQpLCAiKyIsIG1fdWlkKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFVuaXF1ZWRTdHJpbmdJbXBsKiBkZWxldGVkVUlE
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwq
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUq
IG1fc3RydWN0dXJlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKK307CisKK3N0cnVj
dCBQcm9wZXJ0eVR5cGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQ
cm9wZXJ0eVR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYSwgY29uc3QgUHJvcGVydHlUeXBlS2V5
JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6UHJvcGVy
dHlUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5SGFzaCBI
YXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJv
cGVydHlUeXBlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICBjYXNlIEJvb2xl
YW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVz
ZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAg
ICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CkBAIC0xMjcsNiArMTI4LDkgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGlmICghc2FmZVRvRXhlY3V0ZUVk
Z2UucmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIC8vIE5PVEU6IFRoaXMg
dGVuZHMgdG8gbGllIHdoZW4gaXQgY29tZXMgdG8gZWZmZWN0ZnVsIG5vZGVzLCBiZWNhdXNlIGl0
IGtub3dzIHRoYXQgdGhleSBhcmVuJ3QgZ29pbmcgdG8KKyAgICAvLyBnZXQgaG9pc3RlZCBhbnl3
YXkuCisKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAg
ICAgY2FzZSBEb3VibGVDb25zdGFudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIzMiw2ICs1MjMyLDgwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2Yo
Tm9kZSoKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQ
UiwgR1BSUmVnIHRlbXBHUFIpCit7CisgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNp
emUoKSk7CisgICAgCisgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgp
WzBdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFy
eT4gc3RydWN0dXJlOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSOworICAgICAgICAKKyAg
ICAgICAgaWYgKHRlbXBHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgc3RydWN0
dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxHUFJUZW1wb3Jhcnk+KHRoaXMpOworICAgICAgICAgICAg
c3RydWN0dXJlR1BSID0gc3RydWN0dXJlLT5ncHIoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBzdHJ1Y3R1cmVHUFIgPSB0ZW1wR1BSOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3QgZG9uZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9k
ZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBkb25lLmFw
cGVuZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKEpJVENvbXBp
bGVyOjpFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAg
QmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAwLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgp
KSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICB9Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBub2RlKQorewor
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBDZWxsVXNl
OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSwgY2VsbC5ncHIoKSwgSW52
YWxpZEdQUlJlZyk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNlbGwgPSBtX2ppdC5i
cmFuY2hJZkNlbGwodmFsdWVSZWdzKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICB2YWx1ZVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIodmFsdWVSZWdzLCB0ZW1wR1BSKSk7Cisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGNl
bGwubGluaygmbV9qaXQpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVz
ZSBraW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogewogICAgIGlm
IChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigp
KSB7CkBAIC01NjM2LDYgKzU3MTAsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
Q2VsbChFZGdlIAogICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7
CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRn
ZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhp
cywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5jaElmQ2VsbChvcGVyYW5kLmpzVmFsdWVSZWdz
KCkpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBvcGVyYW5kLmpzVmFsdWVSZWdzKCks
IGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICBtX2ppdC5icmFuY2hJZk5vdE90
aGVyKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgdGVtcEdQUikpOworICAgIG9rLmxpbmsoJm1faml0
KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSkK
IHsKICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QpKQpAQCAtNTkxNiw2
ICs2MDA2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAg
IGNhc2UgQ2VsbFVzZToKICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRlQ2VsbE9yT3Ro
ZXIoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBz
cGVjdWxhdGVPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTg5ODEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjE1LDYgKzIyMTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlSXNP
YmplY3RPck51bGwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzRnVuY3Rpb24oTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVR5cGVPZihOb2RlKik7CisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1
Y3R1cmUoTm9kZSosIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUik7CisgICAgdm9pZCBj
b21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92ZVRydWVUbyhH
UFJSZWcpOwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKQEAgLTIzNzQsNiArMjM3Niw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSk7CiAgICAg
dm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChFZGdl
KTsKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3Vs
YXRlT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRnZSk7CiAgICAg
dm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQotICAgIAorCiAgICAgLy8gSW4gbW9zdCBjYXNlcywgd2hhdCB5b3UgcmVh
bGx5IHdhbnQgdG8gZG8gaXMgdmVyaWZ5IHdoZXRoZXIgdGhlIHNldCBpcyB0b3Agb3IgY2xvYmJl
cmVkLCBhbmQKICAgICAvLyBpZiBub3QsIGVudW1lcmF0ZSB0aGUgc2V0IG9mIHN0cnVjdHVyZXMu
IFVzZSB0aGlzIG9ubHkgaW4gY2FzZXMgd2hlcmUgdGhlIHNpbmdsZXRvbiBjYXNlIGlzCiAgICAg
Ly8gbWVhbmluZ2Z1bGx5IHNwZWNpYWwsIGxpa2UgZm9yIHRyYW5zaXRpb25zLgpAQCAtMjAyLDYg
KzIwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIG1fc2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgbV9zZXQuZm9y
RWFjaChmdW5jdG9yKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOSBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIG91
dC5wcmludCgiS25vd25DZWxsIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENlbGxPck90
aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGxPck90aGVyIik7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2lu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIGVudW0gVXNlS2luZCB7CiAgICAg
S25vd25Cb29sZWFuVXNlLAogICAgIENlbGxVc2UsCiAgICAgS25vd25DZWxsVXNlLAorICAgIENl
bGxPck90aGVyVXNlLAogICAgIE9iamVjdFVzZSwKICAgICBGdW5jdGlvblVzZSwKICAgICBGaW5h
bE9iamVjdFVzZSwKQEAgLTEwOCw2ICsxMDksOCBAQCBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlw
ZUZpbHRlckZvcihVc2VLCiAgICAgY2FzZSBDZWxsVXNlOgogICAgIGNhc2UgS25vd25DZWxsVXNl
OgogICAgICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAg
ICAgICAgcmV0dXJuIFNwZWNDZWxsIHwgU3BlY090aGVyOwogICAgIGNhc2UgT2JqZWN0VXNlOgog
ICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKICAgICBjYXNlIEZ1bmN0aW9uVXNlOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAgIGNhc2UgS25vd25Cb29sZWFu
VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgICAgICBjYXNl
IEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAg
ICAgICAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgRnVuY3Rp
b25Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlz
aW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDIxICsyMDI2LDU2IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQogICAgIHsKLSAgICAgICAgTFZh
bHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKICAgICAgICAg
RXhpdEtpbmQgZXhpdEtpbmQ7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5oYXNDb25z
dGFudCgpKQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25zdGFudENhY2hlOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOwotICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKTsKLSAgICAgICAgCi0gICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAgICAg
ICAgICAgc3RydWN0dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgZXhpdEtpbmQsIG1fbm9kZS0+
c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBbdGhpc10gKFN0cnVjdHVyZSogc3RydWN0dXJl
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBjZWxs
ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAg
ICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsm
XSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdl
YWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogewor
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJV
c2UgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIG5vdCBj
ZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNvbnRpbnVh
dGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2Fz
ZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAg
ICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKHZhbHVlKSwKKyAgICAgICAg
ICAgICAgICBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAg
ICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9D
SEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNw
ZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ2hlY2tDZWxsKCkKQEAgLTQwMjIsNiArNDA1Nyw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5z
aXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworCisgICAgICAgICAg
ICBjaGVja0luZmVycmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1
aXJlZFR5cGUoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwog
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNl
KSB7CkBAIC01Njc0LDYgKzU3MTEsMTM1IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1f
b3V0LmludDMyLCByZXN1bHRzKTsKICAgICB9CisKKyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBl
KEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Im
IHR5cGUpCisgICAgeworICAgICAgICAvLyBUaGlzIGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sg
b3IgdHlwZUNoZWNrKCkgYmVjYXVzZSBpdCBpcyBjYWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5v
ZGUgbGlrZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4u
KQorICAgICAgICAvLworICAgICAgICAvLyBtYXkgYmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8g
ICAgIGNhc2UgNDI6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0
eXBlMSk7CisgICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7
CisgICAgICAgIC8vICAgICBjYXNlIDQzOgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJy
ZWRUeXBlKC4uLiwgdHlwZTIpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAg
ICAgICAgIGJyZWFrOworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyB3
aGVyZSB0eXBlMSBhbmQgdHlwZTIgYXJlIGRpZmZlcmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291
bGQgbWVhbiB0aGF0IHRoZSBlZGdlIHdvdWxkIGJlCisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5
cGUxICYgdHlwZTIsIGluc3RlYWQgb2YgdHlwZTEgfCB0eXBlMi4KKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAodHlwZS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRv
bToKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4o
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIElu
ZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6TnVtYmVyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE51bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkp
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJp
bmc6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwg
ZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdFN0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAg
IGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVy
ZVNldCh0eXBlLnN0cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJl
KCkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZl
cnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY2VsbCBjYXNlIikpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNo
ZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIG5vdCBjZWxsIGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNv
bnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkp
OworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNl
bGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShl
ZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgp
KSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQz
Mih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAg
IHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5U
eXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIElu
ZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
T3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
LCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENh
c2UpOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RP
YmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
CisgICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5T
cGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRv
cDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KICAgICAKICAgICBM
VmFsdWUgbG9hZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNzUxNCw2ICs3NjgwLDkgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2Vs
bChlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNl
OgorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC03NTk0LDYgKzc3NjMsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3Vs
YXRlIENlbGxPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2go
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShpc05vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzTm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hF
Q0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90
T3RoZXIodmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAg
aWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpAQCAtODEyNyw2ICs4MzEy
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmIChm
YWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsK
KwogICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBt
X2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KApAQCAtODEzNSw5ICs4
MzIzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+
b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAgCisKICAg
ICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7
CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKKyAg
ICAgICAgICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxw
dHI7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG51bGxwdHI7CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3MCBAQCBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZk5vdFR5cGUoCisgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBc3Nl
bWJseUhlbHBlcnM6Okp1bXBMaXN0IHJlc3VsdDsKKworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5r
aW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICByZXN1bHQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvb2xlYW46CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RCb29sZWFuKHJlZ3Ms
IHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3Ro
ZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPdGhlcihyZWdzLCB0ZW1wR1BS
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAg
ICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVncykpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoSWZOb3ROdW1iZXIocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0
cmluZyhyZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoU3RydWN0
dXJlKE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0
ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgcmVncy5wYXls
b2FkR1BSKCksIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgb2subGluayh0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsK
KyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdChyZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBvay5s
aW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6VG9wOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cHVyaWZ5TmFOKEZQUlJlZyBmcHIpCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gYnJhbmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcHIs
IGZwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxOSw2ICs3MTksOCBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB9CiAKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5cGUoSlNWYWx1ZVJlZ3Mg
cmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwor
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNo
ZWRTdG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6
OlVuc2V0CiAgICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFk
ZHJlc3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKLSAgICAgICAgICAgICAgICAmJiAh
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAg
ICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAg
ICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkg
ewogCiAgICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMyw2ICs2MzMsOCBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgIHBjWzVdLnUucG9p
bnRlciA9IG51bGxwdHI7IC8vIG9mZnNldAogICAgICAgICBwY1s2XS51LnBvaW50ZXIgPSBudWxs
cHRyOyAvLyBuZXcgc3RydWN0dXJlCiAgICAgICAgIHBjWzddLnUucG9pbnRlciA9IG51bGxwdHI7
IC8vIHN0cnVjdHVyZSBjaGFpbgorICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9CisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KHBjWzhdLnUucHV0QnlJZEZsYWdzICYg
UHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2spOwogICAgICAgICAKICAgICAgICAgSlNDZWxsKiBi
YXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CkBAIC02NjAsMTIgKzY2MiwxOCBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGNbN10udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1
dEJ5SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcihpZGVudC5pbXBsKCkp
LnB1dEJ5SWRGbGFncygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRD
YWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgICAg
ICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAg
ICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4o
CisgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKKyAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwo
KSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY1LDE0
ICsxMjY1LDg3IEBAIF9sbGludF9vcF9wdXRfYnlfaWQ6CiAgICAgd3JpdGVCYXJyaWVyT25PcGVy
YW5kcygxLCAzKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MykKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlQ2VsbCh0MywgdDAsIC5vcFB1dEJ5SWRTbG93KQotICAgIGxvYWRpIEpT
Q2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQyCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDQs
IHQxKQotICAgIGJpbmVxIHQyLCB0MSwgLm9wUHV0QnlJZFNsb3cKKyAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oNCwgdDIpCisgICAgYmluZXEgdDIsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0s
IC5vcFB1dEJ5SWRTbG93CiAKICAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6Ci0gICAgIyB0
MSwgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKKyAgICAjIHQyIC0+IGN1cnJlbnQgc3RydWN0
dXJlIElECiAgICAgIyB0MCAtPiBvYmplY3QgYmFzZQogCisgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDMsIHQxKQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQzKQorCisgICAgbG9h
ZHBGcm9tSW5zdHJ1Y3Rpb24oOCwgdDEpCisKKyAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6
CisgICAgIyB0MCAtPiBvYmplY3QgYmFzZQorICAgICMgdDEgLT4gcHV0IGJ5IGlkIGZsYWdzCisg
ICAgIyB0MiAtPiBjdXJyZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDMgLT4gdmFsdWUgdG8gcHV0
CisKKyAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlTWFzaywgLm9wUHV0QnlJZFR5cGVD
aGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyCisKKyAgICAjIFdlIGhhdmUgb25lIG9mIHRo
ZSBub24tc3RydWN0dXJlIHR5cGUgY2hlY2tzLiBGaW5kIG91dCB3aGljaCBvbmUuCisgICAgYW5k
cCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCisgICAgYnBsdCB0MSwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVTdHJpbmcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZworCisgICAg
IyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFN0cmluZywgT2JqZWN0LCBPYmplY3RPck90
aGVyLCBUb3AKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIs
IC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9iamVjdE9yT3RoZXIKKworICAgICMgV2UgYXJl
IGVpdGhlciBPYmplY3RPck90aGVyIG9yIFRvcC4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZVRvcCwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisKKyAgICAjIENoZWNrIGlm
IHdlIGFyZSBPYmplY3RPck90aGVyLgorICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRU
eXBlQ2hlY2tPYmplY3QKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcjoKKyAgICBhbmRxIH5UYWdC
aXRVbmRlZmluZWQsIHQzCisgICAgYnFlcSB0MywgVmFsdWVOdWxsLCAub3BQdXRCeUlkRG9uZUNo
ZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVj
a0xlc3NUaGFuT2JqZWN0T3JPdGhlcjoKKyAgICAjIFdlIGFyZSBlaXRoZXIgU3RyaW5nIG9yIE9i
amVjdC4KKyAgICBidHFueiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFNsb3cKKyAgICBicGVxIHQx
LCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAor
ICAgIGJiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQdXRCeUlkRG9uZUNo
ZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tP
YmplY3Q6CisgICAgYmJhZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BQdXRC
eUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJ
ZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nOgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93
aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyCisgICAgYnBsdCB0MSwg
UHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50
MzIKKworICAgICMgV2UgYXJlIGVpdGhlciBJbnQzMiBvciBOdW1iZXIuCisgICAgYnBlcSB0MSwg
UHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXIKKwor
ICAgIGJxYWVxIHQzLCB0YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMK
KyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcjoKKyAg
ICBidHFueiB0MywgdGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisg
ICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbkludDMy
OgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90
aGVyLgorICAgIGJwbmVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4sIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tCb3R0b21Pck90aGVyCisgICAgeG9ycSBWYWx1ZUZhbHNlLCB0MworICAgIGJ0
cXogdDMsIH4xLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXI6CisgICAgYnBlcSB0MSwg
UHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCisgICAg
am1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0
cnVjdHVyZSwgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmUKKyAgICBidHFu
eiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCisKKy5vcFB1dEJ5SWRUeXBl
Q2hlY2tPYmplY3RXaXRoU3RydWN0dXJlOgorICAgIHVyc2hpZnRwIDMsIHQxCisgICAgYmluZXEg
dDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5
SWREb25lQ2hlY2tpbmdUeXBlczoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAg
ICAgCiAgICAgYnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCwyMiBAQCBlbHNlCiAg
ICAgY29uc3QgTG93ZXN0VGFnID0gRGVsZXRlZFZhbHVlVGFnCiBlbmQKIAorIyBOT1RFOiBUaGUg
dmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gUHV0QnlJZEZsYWdz
LmguCitjb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gMHg2Citjb25zdCBQdXRCeUlkUHJp
bWFyeVR5cGVTZWNvbmRhcnkgPSAweDAKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdp
dGhTdHJ1Y3R1cmUgPSAweDIKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyID0gMHg0Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sgPSAtMHg4
Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSA9IDB4MAorY29uc3QgUHV0QnlJZFNl
Y29uZGFyeVR5cGVCb29sZWFuID0gMHg4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVy
ID0gMHgxMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiA9IDB4MTgKK2NvbnN0IFB1
dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyID0gMHgyMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5
cGVTdHJpbmcgPSAweDI4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCA9IDB4MzAK
K2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9IDB4MzgKK2NvbnN0IFB1
dEJ5SWRTZWNvbmRhcnlUeXBlVG9wID0gMHg0MAorCiBjb25zdCBDYWxsT3BDb2RlU2l6ZSA9IDkK
IAogaWYgWDg2XzY0IG9yIEFSTTY0IG9yIENfTE9PUApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFz
c0luZm8gSW5mZXJyZWRUeXBlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZSkgfTsKKworSW5mZXJyZWRUeXBlKiBJbmZlcnJl
ZFR5cGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5
cGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+
KGNlbGwpOworICAgIGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7
Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlw
ZSo+KGNlbGwpOworCisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAg
IHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmaW5mZXJyZWRUeXBlLT5tX3N0cnVj
dHVyZS0+bV9maW5hbGl6ZXIpOworfQorCitJbmZlcnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBl
OjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIHN3aXRjaCAoZmxhZ3Mg
JiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVT
ZWNvbmRhcnk6CisgICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1h
c2spIHsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbToKKyAgICAgICAg
ICAgIHJldHVybiBCb3R0b207CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29s
ZWFuOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgICAgIGNhc2UgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICAgICAgY2Fz
ZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOgorICAgICAgICAgICAgcmV0
dXJuIE51bWJlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKKyAg
ICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICBjYXNlIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RP
ck90aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wOgorICAgICAgICAg
ICAgcmV0dXJuIFRvcDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOworICAgICAgICB9
CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAg
ICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZTsKKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlw
ZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICB9Cit9CisKK0luZmVycmVk
VHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFs
dWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4g
Qm9vbGVhbjsKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0
dXJuIE90aGVyOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQz
MjsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAg
ICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXND
ZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZzsKKyAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlm
IChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJl
LCBjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBUb3A7Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdz
IGZsYWdzKQoreworICAgIEtpbmQga2luZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAg
c3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVy
ZUlEKGZsYWdzKSk7CisgICAgZWxzZQorICAgICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAg
IHJldHVybiBEZXNjcmlwdG9yKGtpbmQsIHN0cnVjdHVyZSk7Cit9CisKK1B1dEJ5SWRGbGFncyBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnB1dEJ5SWRGbGFncygpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVCb3R0b20pOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0
QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuKTsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkg
fCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyKTsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRh
cnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyKTsKKyAgICBjYXNlIE51bWJlcjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vj
b25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIpOworICAgIGNhc2UgU3RyaW5nOgor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyk7CisgICAgY2FzZSBPYmpl
Y3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmlt
YXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0KTsKKyAgICBjYXNl
IE9iamVjdE9yT3RoZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+
KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0
T3JPdGhlcik7CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlVG9wKTsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAgICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBl
T2JqZWN0V2l0aFN0cnVjdHVyZSB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgp
KSk7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0
dXJlLT5pZCgpKSk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIFB1dEJ5SWROb25lOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
cjo6bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCit7CisgICAgaWYgKCp0aGlzID09IG90
aGVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIEJvdHRvbToKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQm9vbGVhbjoKKyAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgKnRoaXMgPSBUb3A7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBt
X2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIEludDMy
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE51bWJlcjoK
KyAgICAgICAgICAgIG1fa2luZCA9IE51bWJlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAg
ICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAg
ICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKSB7CisgICAgICAg
ICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0g
T2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPdGhlcjoK
KyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0g
b3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
KnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIGNhc2UgT3RoZXI6Cisg
ICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHN3aXRj
aCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmpl
Y3Q6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIGNhc2UgVG9wOgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
KnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OnN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAoreworICAgIERlc2NyaXB0
b3IgbWVyZ2VkID0gKnRoaXM7CisgICAgbWVyZ2VkLm1lcmdlKG90aGVyKTsKKyAgICByZXR1cm4g
KnRoaXMgPT0gbWVyZ2VkOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAg
IG91dC5wcmludCgiOiIsIGluQ29udGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK0luZmVycmVkVHlw
ZTo6SW5mZXJyZWRUeXBlKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVN0
cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fd2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCit7
Cit9CisKK0luZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSgpCit7Cit9CisKK2Jvb2wgSW5mZXJy
ZWRUeXBlOjpjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0
IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9w
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9j
a2VyKSA9PSBleHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0
IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgcmV0dXJuIGNhbldhdGNoKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
ZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0
LmFkZCh3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQo
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBkZXNjcmlwdG9yKCkpOworfQorCitib29s
IEluZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIERlc2NyaXB0
b3IgbXlUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBl
ID0gRGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFsdWUpOworCisgICAgbXlUeXBlLm1lcmdlKG90aGVy
VHlwZSk7CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRo
ZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAg
ICBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKKworICAgIHJldHVybiBraW5kKGxvY2tlcikgIT0g
VG9wOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtKQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgc2V0KGxvY2tlciwgdm0s
IFRvcCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sKKyAgICAv
LyBXZSB3aWxsIHRyaWdnZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4g
Q3VycmVudGx5LCB3cml0ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKKyAgICAvLyBjb3Vs
ZCBjaGFuZ2UuIElmIGl0IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhh
dCB3ZSBjb3VsZCBoYXZlIHVzZWQKKyAgICAvLyBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGlu
IHRoZSBjYWxsZXIsIGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1heWJlIHRo
YXQgd291bGRuJ3QgYmUKKyAgICAvLyBhIGdvb2QgaWRlYS4KKyAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0uaGVhcCk7CisgICAgCisgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBu
b3QgcmVhbGx5IGNoYW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55
dGhpbmcuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgbmV3IGRlc2NyaXB0b3IgbXVzdCBiZSBtb3JlIGdl
bmVyYWwgdGhhbiB0aGUgcHJldmlvdXMgb25lLgorICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN1
YnN1bWVzKGRlc2NyaXB0b3IobG9ja2VyKSkpOworCisgICAgLy8gSWYgdGhlIG5ldyBkZXNjcmlw
dG9ycyBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLCB0aGVuIGl0IGNhbiBvbmx5IGJlIGJlY2F1
c2Ugb25lIGlzIG51bGwuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSAh
PSBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3Io
bG9ja2VyKS5zdHJ1Y3R1cmUoKSB8fCAhbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisKKyAg
ICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHR5cGUsIHNvIG1ha2Ugc3VyZSB0aGF0IGlmIGFueW9u
ZSB3YXMgd2F0Y2hpbmcsIHRoZXkgZmluZCBvdXQgYWJvdXQgaXQgbm93LiBJZgorICAgIC8vIGFu
eW9uZSBpcyB3YXRjaGluZywgd2UgbWFrZSBzdXJlIHRvIGdvIHRvIFRvcCBzbyB0aGF0IHdlIGRv
bid0IGRvIHRoaXMgc29ydCBvZiB0aGluZyBhZ2Fpbi4KKyAgICBpZiAobV93YXRjaHBvaW50U2V0
LnN0YXRlKCkgIT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgIC8vIFdlIGNhbm5vdCBoYXZl
IGJlZW4gaW52YWxpZGF0ZWQsIHNpbmNlIGlmIHdlIHdlcmUsIHRoZW4gd2UnZCBhbHJlYWR5IGJl
IGF0IFRvcC4KKyAgICAgICAgQVNTRVJUKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IElzSW52
YWxpZGF0ZWQpOworCisgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGRvIGV4cGVuc2l2ZSB0aGlu
Z3MgYmVjYXVzZSBzb21lIGNvbXBpbGVyIHRocmVhZCBkZWNpZGVkIHRvIHdhdGNoIHRoaXMgdHlw
ZSBhbmQKKyAgICAgICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFuZ2VkLiBBc3N1bWUgdGhhdCB0aGlz
IHByb3BlcnR5IGlzIGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBkbyBhbnkgbW9yZSB0aGluZ3MgZm9y
CisgICAgICAgIC8vIGl0LgorICAgICAgICBuZXdEZXNjcmlwdG9yID0gVG9wOworCisgICAgICAg
IG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKCJJbmZlcnJlZCB0eXBlIGNoYW5nZWQiKTsKKyAgICB9
CisKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ug
bm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQor
ICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJy
ZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3Jp
cHRvci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4K
KyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0
dXJlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdE
ZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0
dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZS0+bV93YXRjaHBvaW50
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRv
ciBraW5kLgorICAgIG1fa2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAgLy8gQXNz
ZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09
IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJl
KCkKK3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKKworICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgRGVzY3JpcHRvciBuZXdE
ZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIG5ld0Rlc2NyaXB0b3IucmVtb3Zl
U3RydWN0dXJlKCk7CisgICAgCisgICAgc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpOwor
fQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGlu
ZmVycmVkU3RydWN0dXJlID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJl
Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNF
VE9GKEluZmVycmVkU3RydWN0dXJlLCBtX3dhdGNocG9pbnQpKTsKKworICAgIGluZmVycmVkU3Ry
dWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
KQoreworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CisgICAgICAg
IGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAorICAgICAgICAgICAgYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgbV9m
aW5hbGl6ZXIpKTsKKworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVy
ZS0+bV9wYXJlbnQpKTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGluZmVycmVkU3Ry
dWN0dXJlLT5tX3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIGluZmVycmVkU3RydWN0dXJlLT5t
X3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRT
dHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9z
dHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFR5cGU6OktpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAg
ICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBvdXQucHJp
bnQoIk90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50
MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBv
dXQucHJpbnQoIlN0cmluZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0
cnVjdHVyZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgi
T2JqZWN0T3JPdGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OlRvcDoKKyAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5
cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlX2gK
KyNkZWZpbmUgSW5mZXJyZWRUeXBlX2gKKworI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgi
CisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCisjaW5jbHVk
ZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmpl
Y3QgdXNlZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRp
ZXMuCisKK2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBj
cmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIGVudW0gS2luZCA6IHVpbnQ4X3Qg
eworICAgICAgICBCb3R0b20sCisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIE90aGVyLAorICAg
ICAgICBJbnQzMiwKKyAgICAgICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcsCisgICAgICAgIE9i
amVjdFdpdGhTdHJ1Y3R1cmUsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLAor
ICAgICAgICBPYmplY3QsCisgICAgICAgIE9iamVjdE9yT3RoZXIsCisgICAgICAgIFRvcAorICAg
IH07CisKKyAgICBzdGF0aWMgS2luZCBraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzKTsKKyAgICAK
KyAgICBzdGF0aWMgYm9vbCBoYXNTdHJ1Y3R1cmUoS2luZCBraW5kKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgY2xhc3MgRGVzY3JpcHRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBEZXNjcmlwdG9yKCkKKyAgICAgICAgICAgIDogbV9raW5kKEJvdHRvbSkKKyAgICAgICAgICAg
ICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
RGVzY3JpcHRvcihLaW5kIGtpbmQsIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cikKKyAg
ICAgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVj
dHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3Ig
Zm9yVmFsdWUoSlNWYWx1ZSk7CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yRmxhZ3Mo
Vk0mLCBQdXRCeUlkRmxhZ3MpOworCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IEJvdHRvbSAmJiAh
bV9zdHJ1Y3R1cmU7CisgICAgICAgIH0KKworICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3N0cnVjdHVyZTsgfQorCisgICAgICAgIFB1dEJ5SWRGbGFncyBwdXRCeUlkRmxhZ3Mo
KSBjb25zdDsKKworICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1Zh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
ICAgICAgICAgY2FzZSBCb3R0b206CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jv
b2xlYW4oKTsKKyAgICAgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAgICAgICBjYXNlIE51
bWJlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsKKyAgICAgICAg
ICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygp
OworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0g
bV9zdHJ1Y3R1cmU7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCisgICAg
ICAgICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAgY2FzZSBPYmplY3Q6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIE9i
amVjdE9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgVG9wOgorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgICAgICYmIG1f
c3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9raW5kKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNv
bnN0IERlc2NyaXB0b3ImKTsKKyAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAg
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0
aGFuIHRoZSBvdGhlciBvbmUuCisgICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRv
ciYpIGNvbnN0OworCisgICAgICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1
bXBDb250ZXh0KikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgS2luZCBtX2tpbmQ7CisgICAgICAgIFN0cnVjdHVy
ZSogbV9zdHJ1Y3R1cmU7CisgICAgfTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWlu
VGhyZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwg
bV9zdHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICB9
CisgICAgCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7
CisgICAgfQorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVz
Y3JpcHRvcihsb2NrZXIpOworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKGxvY2tlciku
a2luZCgpOyB9CisKKyAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFRv
cDsgfQorICAgIGJvb2wgaXNSZWxldmFudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7
IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJl
bGV2YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QgcmVsZXZhbnQgaWYgaXQncyBUb3AuCisg
ICAgQUxXQVlTX0lOTElORSBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIERlc2NyaXB0b3IgY3VycmVudERlc2NyaXB0b3IgPSBkZXNjcmlw
dG9yTWFpblRocmVhZCgpOworICAgICAgICBpZiAoY3VycmVudERlc2NyaXB0b3IuaW5jbHVkZXNW
YWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudERlc2NyaXB0b3Iua2luZCgp
ICE9IFRvcDsKKyAgICAgICAgcmV0dXJuIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgdmFsdWUpOwor
ICAgIH0KKworICAgIC8vIEltbWVkaWF0ZWx5IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50Lgor
ICAgIHZvaWQgbWFrZVRvcChWTSYgdm0pCisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWFrZVRvcFNsb3codm0pOworICAgIH0KKworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBjdXJyZW50bHkgbWFrZXMgc2Vuc2UgdG8gd2F0Y2ggdGhp
cyBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgZGVzY3JpcHRvci4gTm90ZSB0aGF0CisgICAgLy8gdGhp
cyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFRvcC4KKyAgICBib29sIGNhbldhdGNoKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYpOworICAg
IGJvb2wgY2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYpOworICAgIAorICAgIHZvaWQgYWRkV2F0
Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqKTsK
KyAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOworCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKFZNJik7Cisg
ICAgfkluZmVycmVkVHlwZSgpOworCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZVNsb3coVk0mLCBK
U1ZhbHVlKTsKKyAgICB2b2lkIG1ha2VUb3BTbG93KFZNJik7CisgICAgdm9pZCBzZXQoY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgRGVzY3JpcHRvcik7CisgICAgdm9pZCByZW1vdmVT
dHJ1Y3R1cmUoKTsKKworICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworICAg
IAorICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVj
dHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAg
ICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9
OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgOiBwdWJsaWMgVW5jb25k
aXRpb25hbEZpbmFsaXplciB7CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVy
ZUZpbmFsaXplcigpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0
cnVjdHVyZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoK
KyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3Ry
dWN0dXJlKik7CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZS5nZXQoKTsgfTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBj
bGFzcyBJbmZlcnJlZFR5cGU7CisgICAgICAgIGZyaWVuZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZUZpbmFs
aXplcjsKKyAgICAgICAgCisgICAgICAgIEluZmVycmVkVHlwZSogbV9wYXJlbnQ7CisgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCisgICAgICAgIEluZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludCBtX3dhdGNocG9pbnQ7CisgICAgICAgIEluZmVycmVkU3RydWN0
dXJlRmluYWxpemVyIG1fZmluYWxpemVyOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCisgICAgLy8gTk9URTogSWYgdGhpcyBp
cyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVz
IHRoYXQgaXQgd291bGRuJ3QgYmUKKyAgICAvLyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWlu
LiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9z
ZWQgdG8gdGhlIERGRworICAgIC8vIHRocmVhZC4gVGhlIERGRyB3aWxsIHVzZSB0aGUgSW5mZXJy
ZWRUeXBlIGFzIHRoZSB0aGluZyB0aGF0IGl0IHdhdGNoZXMuCisgICAgSW5saW5lV2F0Y2hwb2lu
dFNldCBtX3dhdGNocG9pbnRTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6SW5mZXJy
ZWRUeXBlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBJbmZlcnJl
ZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5
cGVUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlVGFibGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEluZmVycmVkVHlwZVRhYmxlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGVUYWJsZSIsIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlVGFibGUpIH07CisKK0luZmVycmVk
VHlwZVRhYmxlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJy
ZWRUeXBlVGFibGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGVUYWJsZSh2bSk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGVUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBl
VGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUq
PihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZS0+SW5mZXJyZWRUeXBlVGFibGU6On5JbmZl
cnJlZFR5cGVUYWJsZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGlu
ZmVycmVkVHlwZVRhYmxlID0ganNDYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisKKyAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihpbmZlcnJlZFR5cGVUYWJsZS0+bV9sb2NrKTsK
KyAgICAKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogaW5mZXJyZWRUeXBlVGFibGUtPm1fdGFibGUp
IHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBl
bnRyeS52YWx1ZS5jbGVhcigpOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5
cGVUYWJsZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOworICAgIGlmIChp
dGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRl
ZCB0eXBlcy4KKyAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAg
aXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVk
VHlwZVRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCB1aWQpOwor
fQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Cit9CisK
K2Jvb2wgSW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKAorICAgIFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2Ug
YWdlKQoreworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhh
dCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIAorICAgIGlmIChh
Z2UgPT0gT2xkUHJvcGVydHkpIHsKKyAgICAgICAgVGFibGVUeXBlOjppdGVyYXRvciBpdGVyID0g
bV90YWJsZS5maW5kKHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1f
dGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgorICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXIt
PnZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIAorICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAg
IHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAg
cmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5m
ZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAg
ICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0p
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLnNldCh2bSwgdGhpcywgaW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xl
YXIoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1h
a2VUb3AoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFn
ZSBhZ2UpCit7CisgICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0
aGF0IG9ubHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgaWYgKGFnZSA9
PSBPbGRQcm9wZXJ0eSkgeworICAgICAgICBUYWJsZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Rh
YmxlLmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJs
ZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ug
b24gcmVwbGFjZSA9PiB0b3AuCisKKyAgICAgICAgaXRlci0+dmFsdWUtPm1ha2VUb3Aodm0pOwor
ICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQo
cHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9
CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRvcCh2bSk7CisgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworfQorCitJbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRU
eXBlVGFibGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1
Y3R1cmUuZ2V0KCkpCit7Cit9CisKK0luZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFi
bGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUg
SW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMg
aXMgYSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVz
dHJ1Y3RvciBhbmQgbWFrZXMgbGlmZXR5cGUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUs
IHNpbmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJl
IGRlbGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20g
UHJvcGVydHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBh
biBJbmZlcnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVz
IChpZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBp
biBzb21lIFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUg
dHlwZXMgb2YgcHJvcGVydGllcyBmcm9tCisvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlm
IHRoZSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2Ns
YXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSog
Y3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBDb25jdXJyZW50SklUTG9jayYg
bG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV90YWJsZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIEdldCB0aGUgY3VycmVudCBpbmZl
cnJlZCB0eXBlLiBSZXR1cm5zIG51bGxwdHIgZm9yIGJvdGggVG9wIGFuZCBCb3R0b20uIE51bGwg
bWVhbnMgQm90dG9tIGlmIHRoZQorICAgIC8vIG93bmluZyBTdHJ1Y3R1cmUgZG9lc24ndCBrbm93
IGFib3V0IHRoZSBwcm9wZXJ0eS4KKyAgICBJbmZlcnJlZFR5cGUqIGdldChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdl
dChVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIEluZmVycmVkVHlwZSogZ2V0KFByb3BlcnR5TmFt
ZSk7CisKKyAgICBlbnVtIFN0b3JlZFByb3BlcnR5QWdlIHsKKyAgICAgICAgTmV3UHJvcGVydHks
CisgICAgICAgIE9sZFByb3BlcnR5CisgICAgfTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIEluZmVycmVkVHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCByZWxldmFudCBh
ZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90CisgICAgLy8gcmVsZXZhbnQgaWYgaXQncyBUb3AuIE5v
dGUgdGhhdCB0aGlzIHRhYmxlIHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3AgZW50cmllcy4KKyAg
ICBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBTdG9yZWRQ
cm9wZXJ0eUFnZSk7CisKKyAgICAvLyBJbnZhbGlkYXRlcyB0aGUgdHlwZSBmb3IgdGhlIHByb3Bl
cnR5LiBVc2VmdWwgaWYgd2UgZGV0ZWN0IGEgc3RvcmUgaW4gYSByZWZsZWN0aXZlIGNvbnRleHQu
CisgICAgdm9pZCBtYWtlVG9wKFZNJiwgUHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSk7
CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlVGFibGUoVk0mKTsKKyAgICB+SW5mZXJyZWRU
eXBlVGFibGUoKTsKKworICAgIC8vIEJvdHRvbTogYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8v
IFRvcDogbnVsbCB2YWx1ZSBpbiB0YWJsZSwgIXZhbHVlLT5pc1JlbGV2YW50KCksIG9yIGFic2Vu
Y2UgZnJvbSB0YWJsZS4KKyAgICAvLworICAgIC8vIFdlIGtub3cgaG93IHRvIGRldGVybWluZSBp
ZiBhYnNlbmNlIGZyb20gdGhlIHRhYmxlIGlzIGJvdHRvbSBvciB0b3AgZGVwZW5kaW5nIG9uIHdo
ZXRoZXIgdGhlCisgICAgLy8gcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgb3duaW5nIHN0cnVj
dHVyZS4gSGVuY2UsIGRlcGVuZGluZyBvbiB0aGUgc3RydWN0dXJlLCBhYnNlbmNlIG1heSBoYXZl
CisgICAgLy8gZGlmZmVyZW50IG1lYW5pbmdzLiBUaGUgd2F5IHRoYXQgdGhpcyBjbGFzcyBkZXRl
cm1pbmVzIGlmIHRoZSBvd25pbmcgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eQorICAg
IC8vIGlzIHRoYXQgd2UgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFjdGlvbnM6IHJlcGxhY2Ugb3Ig
dHJhbnNpdGlvbi4gSWYgd2UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5CisgICAgLy8gKHRyYW5z
aXRpb24pLCB0aGVuIGFic2VuY2UgbWVhbnMgYm90dG9tLiBJZiB3ZSdyZSBzdG9yaW5nIHRvIGFu
IGV4aXN0aW5nIHByb3BlcnR5IChyZXBsYWNlLCB0aGVuCisgICAgLy8gYWJzZW5jZSBtZWFucyB0
b3AuIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBoYXZlIHRvIHdhdGNoIG91dCBmb3IgdGhlIGNhc2Ug
d2hlcmUgdHdvIHN0cnVjdHVyZXMsIFMxIGFuZAorICAgIC8vIFMyLCBzaGFyZSB0aGUgc2FtZSBJ
bmZlcnJlZFR5cGVUYWJsZSBhbmQgbmVpdGhlciBvZiB0aGVtIGluaXRpYWxseSBrbm93IGFib3V0
IHByb3BlcnR5IFAuIFMxIG1heQorICAgIC8vIHdhbnQgdG8gYWRkIFAgd2l0aG91dCBhIHR5cGUs
IHdoaWxlIFMyIG1heSB3YW50IHRvIGFkZCBQIHdpdGggYSB0eXBlLiBJZiBTMSBhZGRlZCBQIGFu
ZCB1c2VkIGFic2VuY2UKKyAgICAvLyB0byBpbmRpY2F0ZSBUb3AsIHRoZW4gUzIgd291bGQgdXNl
IHRoYXQgYWJzZW5jZSB0byBtZWFuIEJvdHRvbSBhbmQgd291bGQgZW5kIHVwIGNyZWF0aW5nIGEg
bm9uLVRvcAorICAgIC8vIGVudHJ5IGluIHRoZSB0YWJsZS4gVGhlbiBTMSB3b3VsZCBmb3JnZXQg
dGhhdCBpdCB3YW50ZWQgVG9wLCBhbmQgd291bGQgdXNlIFMyJ3MgdHlwZS4gQ2xlYXJseSwKKyAg
ICAvLyB0aGF0J3MgYmFkLiBXZSBhdm9pZCBzdWNoIGNvbmZ1c2lvbiBieSBlbnN1cmluZyB0aGF0
IGEgdHJhbnNpdGlvbiBhbHdheXMgYWRkcyBhbiBlbnRyeS4gSGVuY2UsCisgICAgLy8gYWJzZW5j
ZS1tZWFucy1ib3R0b20gb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIHByb3BlcnRpZXMgYWRkZWQg
YmVmb3JlIHRoZSBJbmZlcnJlZFR5cGVUYWJsZSB3YXMKKyAgICAvLyBjcmVhdGVkLgorICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBXcml0ZUJhcnJpZXI8SW5m
ZXJyZWRUeXBlPiwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8VW5pcXVlZFN0cmluZ0lt
cGwqPj4gVGFibGVUeXBlOworICAgIAorICAgIFRhYmxlVHlwZSBtX3RhYmxlOworCisgICAgLy8g
V2Ugb25seSBncmFiIHRoaXMgbG9jayB3aGVuIHdlJ3JlIGRvaW5nIG1vZGlmaWNhdGlvbnMgb24g
dGhlIG1haW4gdGhyZWFkLCBvciByZWFkcyBvbiB0aGUgY29tcGlsZXIKKyAgICAvLyB0aHJlYWQu
IFRoZSBjb21waWxlciB0aHJlYWQgaXMgbm90IGFsbG93ZWQgdG8gZG8gbW9kaWZpY2F0aW9ucy4K
KyAgICBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEluZmVycmVkVHlwZVRhYmxlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExODks
NiArMTE4OSw4IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+
aGFzSW5mZXJyZWRUeXBlcygpKTsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRB
dHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkgewpAQCAtMTIyNywyOSArMTIyOSw0MCBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwotICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1
cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CisgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmUoCisgICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LCBvZmZzZXQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKKyAgICAgICAgbmV3U3RydWN0dXJl
LT53aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsK
KyAgICAgICAgCiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRD
YXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0
eSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVChuZXdTdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZh
bGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3Ry
dWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZz
ZXQsIHZhbHVlKTsKICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmli
dXRlczsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJy
ZW50QXR0cmlidXRlcyk7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0lu
ZmVycmVkVHlwZSk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVw
bGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5
cGUpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgK
KyAgICAgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkg
PT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgfQorCiAgICAgICAgIHNsb3Qu
c2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOwogCkBAIC0xMjY4LDE2ICsxMjgxLDE5IEBAIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAvLyB3ZSB3YW50LgogICAgIERlZmVycmVk
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7
CiAgICAgCi0gICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29u
dGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVk
V2F0Y2hwb2ludEZpcmUpOworICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFu
c2l0aW9uKAorICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkg
PT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChv
ZmZzZXQpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0g
ICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0
dXJlKTsKKyAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwor
ICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0
cnVjdHVyZSk7CiAKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIHNsb3Qu
c2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KQotICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7
CisgICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMzNSw4ICsxMzUxLDExIEBAIGlubGluZSB2b2lk
IEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dP
dXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVT
dG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCkt
PnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOworICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICBzdHJ1Y3R1
cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2hvdWxkT3B0aW1pemUpOworICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDExICszNTAsMTUgQEAgdm9pZCBTdHJ1Y3R1
cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlU
YWJsZSgpLnNldCh2bSwgdGhpcywgdGFibGUpOwogCisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5
cGVUYWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisKICAgICBmb3IgKHNpemVfdCBp
ID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0
dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1
cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVy
ZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CisgICAgICAgIGlmICh0eXBlVGFibGUgJiYgdHlw
ZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpKSkKKyAgICAgICAg
ICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7CiAgICAgICAgIHByb3BlcnR5VGFibGUo
KS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0
Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC00NjQsNiArNDY4LDcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0
ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUo
KS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CisgICAgdHJhbnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAK
ICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cyk7CiAKQEAgLTQ3OSw2ICs0ODQsMjQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdAogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CisgICAgLy8gTk9URTogVGhlcmUgYXJlIHNv
bWUgZ29vZCByZWFzb25zIHdoeSB0aGlzIGdvZXMgZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGlj
dGlvbmFyeSByYXRoZXIgdGhhbgorICAgIC8vIGNhY2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBm
aXggYWxsIG9mIHRoZXNlIHRoaW5ncywgYnV0IHdlIG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlm
IHdlIGV2ZXIgdHJ5CisgICAgLy8gdG8gb3B0aW1pemUgdGhpcyBjYXNlLgorICAgIC8vCisgICAg
Ly8gLSBDYWNoZWQgdHJhbnNpdGlvbnMgdXN1YWxseSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUs
IGFuZCBhc3N1bWUgdGhhdCB0aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgdGhleQorICAgIC8vICAg
Y2FuIGp1c3QgcmVidWlsZCB0aGUgdGFibGUgYnkgbG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25z
LiBUaGF0IGNvZGUgYXNzdW1lcyB0aGF0IHRoZSB0YWJsZSBvbmx5CisgICAgLy8gICBncmV3IGFu
ZCBuZXZlciBzaHJhbmsuIFRvIHN1cHBvcnQgcmVtb3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2Ug
dGhlIHByb3BlcnR5IHRhYmxlIG1hdGVyaWFsaXphdGlvbgorICAgIC8vICAgY29kZSB0byBoYW5k
bGUgZGVsZXRpb25zLiBBbHNvLCB3ZSBoYXZlIGxvZ2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9w
ZXJ0aWVzIG9uIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFi
bGUgYnkganVzdCBsb29raW5nIGJhY2sgdGhyb3VnaCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNp
bmNlIHRoZSBsYXN0CisgICAgLy8gICBzdHJ1Y3R1cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUu
IFRoYXQgbG9naWMgd291bGQgYWxzbyBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hl
ZAorICAgIC8vICAgcmVtb3ZhbHMuCisgICAgLy8KKyAgICAvLyAtIEluZmVycmVkVHlwZVRhYmxl
IGFzc3VtZXMgdGhhdCByZW1vdmFsIGhhcyBuZXZlciBoYXBwZW5lZC4gVGhpcyBpcyBpbXBvcnRh
bnQgc2luY2UgaWYgd2UgY291bGQKKyAgICAvLyAgIHJlbW92ZSBhIHByb3BlcnR5IGFuZCB0aGVu
IHJlLWFkZCBpdCBsYXRlciwgdGhlbiB0aGUgImFic2VuY2UgbWVhbnMgdG9wIiBvcHRpbWl6YXRp
b24gd291bGRuJ3QKKyAgICAvLyAgIHdvcmsgYW55bW9yZSwgdW5sZXNzIHJlbW92YWwgYWxzbyBl
aXRoZXIgcG9pc29uZWQgdHlwZSBpbmZlcmVuY2UgKGJ5IGRvaW5nIHNvbWV0aGluZyBlcXVpdmFs
ZW50IHRvCisgICAgLy8gICBoYXNCZWVuRGljdGlvbmFyeSkgb3IgYnkgc3Ryb25nbHkgbWFya2lu
ZyB0aGUgZW50cnkgYXMgVG9wIGJ5IGVuc3VyaW5nIHRoYXQgaXQgaXMgbm90IGFic2VudCwgYnV0
CisgICAgLy8gICBpbnN0ZWFkLCBoYXMgYSBudWxsIGVudHJ5LgorICAgIAogICAgIEFTU0VSVCgh
c3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKIAogICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKTsKQEAgLTg0MSw2ICs4NjQsNDMgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJ
bnRlcm5hbFBybwogICAgIHNldERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKHRydWUpOwogfQog
Cit2b2lkIFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAorICAgIFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSwK
KyAgICBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNs
YXNzSW5mbygpID09IGluZm8oKSk7CisgICAgQVNTRVJUKCFoYXNCZWVuRGljdGlvbmFyeSgpKTsK
KworICAgIC8vIENyZWF0ZSB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSBiZWZvcmUgZG9pbmcgYW55
dGhpbmcgZWxzZSwgc28gdGhhdCB3ZSBkb24ndCBHQyBhZnRlciB3ZSBoYXZlIGFscmVhZHkKKyAg
ICAvLyBncmFiYmVkIGEgcG9pbnRlciBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuCisgICAgSW5mZXJy
ZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKyAgICBpZiAo
IXRhYmxlKSB7CisgICAgICAgIHRhYmxlID0gSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZSh2bSk7
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1faW5mZXJyZWRUeXBl
VGFibGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBvbmx5IHdv
cmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgorICAgIFByb3BlcnR5VGFibGUqIHBy
b3BlcnR5VGFibGU7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBw
cm9wZXJ0eVRhYmxlKTsKKworICAgIC8vIFdlIG11c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhh
dmluZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMg
cHJlc2VudAorICAgIC8vIGFscmVhZHksIHNvIHdlIG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxl
IG5vdy4KKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyAuLi4gYW5kIHRoZSBw
cm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQuCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBw
cm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBBU1NFUlQoZW50cnkp
OworCisgICAgaWYgKHNob3VsZE9wdGltaXplKQorICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRU
eXBlID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2Up
OworICAgIGVsc2UgeworICAgICAgICB0YWJsZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lLCBh
Z2UpOworICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gZmFsc2U7CisgICAgfQorfQor
CiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogCiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRz
KiBwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzID0gMDsKQEAgLTEwNTgsNiArMTExOCw4IEBAIHZv
aWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CiAgICAgfSBlbHNlIGlm
ICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3Qt
Pm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1faW5mZXJyZWRUeXBlVGFibGUpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhp
bmdUeXBlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC04
MSwxMSArODIsMTMgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0
cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhl
ciBvciBub3QgYSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQg
dHlwZSB0YWJsZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtl
eShudWxscHRyKQogICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0
dHJpYnV0ZXMoMCkKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAg
IH0KICAgICAKQEAgLTkzLDYgKzk2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAg
ICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRy
aWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAg
IHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAg
fQpAQCAtMzIzLDYgKzMyNyw3IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChW
TSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBl
KTsKIAogICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdp
bGwgY2FsbCB5b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBT
dHJ1Y3R1cmUncyBsb2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBp
cyBoZWxkIG9yIG5vdCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNDgxLDYgKzQ4Niw0MCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRp
ZXNJZk5lY2Vzc2FyeSh2bSk7CiAgICAgfQogCisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1faW5mZXJyZWRUeXBlVGFibGU7CisgICAg
fQorCisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3IoVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKKyAgICB7CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2lu
ZmVycmVkVHlwZVRhYmxlLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlLT5nZXQodWlk
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIGluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKKyAgICB7CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IGluZmVycmVkVHlw
ZUZvcih1aWQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZGVzY3JpcHRvcigpOworICAg
ICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXpl
KQorICAgIHsKKyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRp
bWl6ZSAmJiAhbV9pbmZlcnJlZFR5cGVUYWJsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0
aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpOZXdQcm9wZXJ0eSk7CisgICAgfQorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgIFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRp
bWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6T2xkUHJvcGVydHkpOwor
ICAgIH0KKwogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUo
SlNWYWx1ZSk7CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMg
bWF0Y2ggZW5vdWdoIHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMK
QEAgLTYzMiw2ICs2NzEsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRXYXRjaGlu
Z0ludGVybmFsUHJvcGVydGllcyhWTSYpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3
aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgICAgIFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sLCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOworCiAgICAgc3RhdGlj
IGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3Qg
aW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCkBAIC02
NTUsNiArNjk3LDggQEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3Vn
aCBwcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3Ro
ZXIgdGhyZWFkLgogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFi
bGVVbnNhZmU7CiAKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFibGU+IG1faW5mZXJy
ZWRUeXBlVGFibGU7CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0
aW9uV2F0Y2hwb2ludFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IDwgMjU2LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE4
OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTkgKzc1LDE5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7
Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsK
LQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3Bl
cnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFs
aWRPZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVk
VHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0lu
ZmVycmVkVHlwZSk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0
dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworfQorCitBTFdB
WVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVk
VHlwZSkKK3sKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCkBAIC0xMDEsNiArMTAxLDcg
QEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgICAgICByZXR1
cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsK
KyAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlOwogICAgIHJldHVy
biBlbnRyeS0+b2Zmc2V0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJIb3N0Q2Fs
bFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluY3Jl
bWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNBUElW
YWx1ZVdyYXBwZXIuaCIKQEAgLTI0MSw2ICsyNDIsOCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKKyAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVU
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFeGNlcHRpb246OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9taXNlRGVmZXJyZWRT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDggQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vh
a01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0
cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7Cisg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlz
ZURlZmVycmVkU3RydWN0dXJlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261256</attachid>
            <date>2015-09-15 16:21:27 -0700</date>
            <delta_ts>2015-09-15 18:04:45 -0700</delta_ts>
            <desc>it inferred a type!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>175760</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNB
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJB
OEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBG
RkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZF
ODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZC
MUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAw
NzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAv
KiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIg
LyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBC
QUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYw
IC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUy
MTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQv
TExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0
QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
ZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8s
CiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJ
CQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBA
IC00Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8q
IEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2
IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0
NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQx
LDYgKzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1
Mjk2LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyog
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBG
NTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRF
QzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAog
CQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8s
CiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0
NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJ
CQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4
NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZB
OTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1
NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0
OTcsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJ
CQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcx
REQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFC
ODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSB0cnVlOwog
CiBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKICAgICBDQ2FsbEhlbHBlcnMqIGppdCB7
IG51bGxwdHIgfTsKQEAgLTY4Niw2ICs2ODYsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZShBY2Nlc3NHZW5lcmF0aQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBp
ZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVu
dC5pbXBsKCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAg
ICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZSh2YWx1
ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAgICB9IGVsc2Ug
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsK
KyAgICAgICAgCiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAg
ICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcw
OSw2ICs3MTYsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8
ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFk
ZXIoKSk7CiAKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgp
LT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlw
dG9yKCksICJcbiIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGpp
dC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9y
KCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
RG9uJ3QgaGF2ZSB0eXBlLlxuIik7CisgICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dQYXRoOwogCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxv
Y2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJQdXRCeUlkRmxhZ3MuaCIKIAorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1
ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTM1LDE2ICszNiwxNCBAQCBuYW1l
c3BhY2UgV1RGIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsKLSAgICBTdHJpbmdQcmludFN0
cmVhbSBzdHJpbmdPdXQ7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCJ8Iik7CiAgICAgaWYgKGZs
YWdzICYgUHV0QnlJZElzRGlyZWN0KQotICAgICAgICBzdHJpbmdPdXQucHJpbnQoY29tbWEsICJJ
c0RpcmVjdCIpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIpOwogCi0gICAg
Q1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7Ci0gICAgaWYgKCFzdHJpbmcu
bGVuZ3RoKCkpCi0gICAgICAgIG91dC5wcmludCgiTm9uZSIpOwotICAgIGVsc2UKLSAgICAgICAg
b3V0LnByaW50KHN0cmluZyk7CisgICAgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQgPSBJbmZlcnJl
ZFR5cGU6OmtpbmRGb3JGbGFncyhmbGFncyk7CisgICAgb3V0LnByaW50KGNvbW1hLCBraW5kKTsK
KyAgICBpZiAoSW5mZXJyZWRUeXBlOjpoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgIG91dC5w
cmludCgiOiIsIGJpdHdpc2VfY2FzdDxpbnQzMl90PihkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDEzICsyNiw3MCBAQAogI2lmbmRlZiBQdXRCeUlkRmxhZ3NfaAogI2RlZmluZSBQdXRCeUlk
RmxhZ3NfaAogCisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgorCiBuYW1lc3BhY2UgSlND
IHsKIAotZW51bSBQdXRCeUlkRmxhZ3MgeworZW51bSBQdXRCeUlkRmxhZ3MgOiBpbnRwdHJfdCB7
CiAgICAgUHV0QnlJZE5vbmUgPSAwLAotICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDEKKworICAgIC8v
IFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHV0X2J5X2lkIGlzIGRpcmVjdC4gVGhhdCBt
ZWFucyB0aGF0IHdlIHN0b3JlIHRoZSBwcm9wZXJ0eSB3aXRob3V0CisgICAgLy8gY2hlY2tpbmcg
aWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgYSBzZXR0ZXIuCisgICAgUHV0QnlJZElzRGlyZWN0
ID0gMHgxLAorICAgIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrID0gMHgxLAorCisgICAgLy8g
Tk9URTogVGhlIHZhbHVlcyBiZWxvdyBtdXN0IGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGluIExv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtLgorCisgICAgLy8gRGV0ZXJtaW5pbmcgdGhlIHJlcXVpcmVk
IGluZmVycmVkIHR5cGUgaW52b2x2ZXMgZmlyc3QgY2hlY2tpbmcgdGhlIHByaW1hcnkgdHlwZSBt
YXNrLCBhbmQgdGhlbgorICAgIC8vIHVzaW5nIHRoYXQgdG8gZmlndXJlIG91dCB0aGUgbWVhbmlu
ZyBvZiB0aGUgc2Vjb25kYXJ5IG1hc2s6CisgICAgLy8gc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQ
cmltYXJ5VHlwZU1hc2spIHsKKyAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFy
eToKKyAgICAvLyAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykg
eworICAgIC8vICAgICAuLi4KKyAgICAvLyAgICAgfQorICAgIC8vICAgICBicmVhazsKKyAgICAv
LyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgLy8gY2Fz
ZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAvLyAg
ICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQgPSBkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncyk7Cisg
ICAgLy8gICAgIGJyZWFrOworICAgIC8vIH0KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0g
MHg2LAorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MCwgLy8gTmVlZCB0byBj
aGVjayB0aGUgc2Vjb25kYXJ5IHR5cGUgbWFzayBmb3IgdGhlIHR5cGUuCisgICAgUHV0QnlJZFBy
aW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MiwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFz
IHN0cnVjdHVyZSBJRC4KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlciA9IDB4NCwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVyZSBJRC4KKworICAg
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayA9IC0weDgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVCb3R0b20gPSAweDAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuID0gMHg4LAor
ICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwLAorICAgIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlSW50MzIgPSAweDE4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyID0gMHgy
MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgsCisgICAgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPYmplY3QgPSAweDMwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0
T3JPdGhlciA9IDB4MzgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCiB9Owog
CitpbmxpbmUgUHV0QnlJZEZsYWdzIGVuY29kZVN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEIGlkKQor
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFn
cz4oc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMyk7CisjZWxzZQorICAgIFB1dEJ5
SWRGbGFncyByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCk7CisgICAgQVNT
RVJUKCEocmVzdWx0ICYgflB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZW5kaWYKK30KKworaW5saW5lIFN0cnVjdHVyZUlEIGRlY29kZVN0cnVjdHVyZUlE
KFB1dEJ5SWRGbGFncyBmbGFncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgPj4gMyk7CisjZWxzZQorICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8U3RydWN0dXJlSUQ+KGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNr
KTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3Jt
YXRpb24pOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JG
b3IodWlkKSk7CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwpAQCAtMTAzLDcgKzEwMyw4
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIH0KICAgICAKLSAgICBy
ZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCisgICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9m
ZnNldCwgbmV3U3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogfQog
CiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMTYyLDcgKzE2Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+
dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQsIEluZmVycmVkVHlw
ZTo6VG9wKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKICAgICB9CkBAIC0xOTMsNyArMTk0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVp
ZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIApAQCAtMjA1LDggKzIwNywxMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29u
ZGl0aW9uU2V0ID0gYWNjZXNzLmNvbmRpdGlvblNldCgpOwogICAgICAgICAgICAgICAgIGlmICgh
Y29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJHZXR0aW5nIHR5cGUgZnJvbSBuZXdTdHJ1Y3R1cmUgPSAiLCAqYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJUeXBlOiAiLCBh
Y2Nlc3MubmV3U3RydWN0dXJlKCktPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSwgIlxu
Iik7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1
Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBhY2Nl
c3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRU
eXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTMyOSw4ICszMzQsMTAgQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0
ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKSkKKworICAgICAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgdmFyaWFudCA9CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZv
cih1aWQpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMzU2LDEzICszNjMsMTYgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAg
ICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVy
ZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlk
LCAwLCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCiAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFw
cGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1
Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIHRy
YW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHRyYW5zaXRp
b24tPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSkpOwogICAgICAgICBpZiAoIWRpZEFw
cGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
NyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9uZXdT
dHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9IG90
aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7CisgICAg
bV9yZXF1aXJlZFR5cGUgPSBvdGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIubV9j
YWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNlCkBA
IC01MiwxOCArNTMsMjEgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRv
cgogICAgIHJldHVybiAqdGhpczsKIH0KIAotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRWYXJp
YW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQubV9v
bGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFyaWFu
dCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03MSw2ICs3NSw3
IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1bHQu
bV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0
ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1
bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtODUsNiArOTAsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVy
KAogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6Om1v
dmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVycmVk
VHlwZTo6VG9wOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzNCw5ICsxNDAsMTIgQEAg
Ym9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogewogICAgIGlmIChtX29m
ZnNldCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KG1fcmVxdWlyZWRUeXBlICE9IG90aGVyLm1fcmVxdWlyZWRUeXBlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIFJlcGxhY2U6Cisg
ICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAgICAg
ICAgIGNhc2UgUmVwbGFjZTogewogICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSk7CkBAIC0xNTgsNiArMTY3LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1w
dFRvTWVyZ2UoY29ucwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgfQogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAgICAg
ICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CkBAIC0yMTAsMTQgKzIyMCwxNSBAQCB2b2lkIFB1
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIAogICAgIGNhc2UgUmVw
bGFjZToKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNv
bnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIj4i
KTsKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250
ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLAorICAg
ICAgICAgICAgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFRyYW5z
aXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
aW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAgICAg
cG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwKLSAg
ICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZzZXQg
PSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNl
dCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBl
KCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJsaWM6
CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRCeUlk
VmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0
JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAg
IAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAg
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0
LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMgUHV0
QnlJZFZhcmlhbnQgc2V0dGVyKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0
eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtOTksNiArOTks
MTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CiAgICAgfQogCisg
ICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHJlcXVpcmVkVHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFR5cGU7CisgICAgfQorCiAgICAgYm9vbCB3cml0ZXNT
dHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsK
ICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKQEAgLTEzMCw2ICsxMzUsNyBAQCBwcml2YXRl
OgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CiAgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Cisg
ICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fcmVxdWlyZWRUeXBlOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1
ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGFyc2VyTW9k
ZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIKICNp
bmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmgiCkBAIC05OCwxMiArOTcsMTAgQEAgc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rpb24g
ewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KICAgICBVbmxp
bmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsgfQog
ICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3BlcmFu
ZDsgfQotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oUHV0QnlJZEZsYWdzIGZsYWdzKSB7IHUucHV0
QnlJZEZsYWdzID0gZmxhZ3M7IH0KICAgICB1bmlvbiB7CiAgICAgICAgIE9wY29kZUlEIG9wY29k
ZTsKICAgICAgICAgaW50MzJfdCBvcGVyYW5kOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsKLSAg
ICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFnczsKICAgICB9IHU7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4
OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsMzkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
dG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBO
b3RlIHRoYXQgZm9yIGFueSB3YXRjaHBvaW50IHRoYXQgaXMgdmlzaWJsZSBmcm9tIHRoZSBERkcs
IGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byB3cml0ZSBjb2RlIGxpa2U6CisgICAgLy8KKyAgICAv
LyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAgIC8v
CisgICAgLy8gQ29uY3VycmVudGx5IHRvIHRoaXMsIHRoZSBERkcgY291bGQgZG86CisgICAgLy8K
KyAgICAvLyBpZiAody5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcGVyZm9ybSBvcHRpbWl6
YXRpb25zOworICAgIC8vIGlmICghdy5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcmV0cnkg
Y29tcGlsYXRpb247CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgdGhlIERGRyBhbGdvcml0aG0g
aXMgd2lkZXNwcmVhZCwgYW5kIHNvdW5kLCBiZWNhdXNlIGZpcmVBbGwoKSBhbmQgaW52YWxpZGF0
ZSgpIHdpbGwgbGVhdmUKKyAgICAvLyB0aGUgd2F0Y2hwb2ludCBpbiBhICFpc1N0aWxsVmFsaWQo
KSBzdGF0ZS4gSGVuY2UsIGlmIGZpcmVBbGwoKSBvciBpbnZhbGlkYXRlKCkgaW50ZXJsZWF2ZWQg
YmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCBpc1N0aWxsVmFsaWQoKSBjaGVjayBhbmQgdGhlIHNl
Y29uZCBvbmUsIHRoZW4gaXQgd291bGQgc2ltcGx5IGNhdXNlIHRoZSBERkcgdG8gcmV0cnkKKyAg
ICAvLyBjb21waWxhdGlvbiBsYXRlci4KKyAgICAvLworICAgIC8vIEJ1dCwgaWYgeW91IGNoYW5n
ZSBzb21lIHBpZWNlIG9mIHN0YXRlIHRoYXQgdGhlIERGRyBtaWdodCBvcHRpbWl6ZSBmb3IsIGJ1
dCBpbnZhbGlkYXRlIHRoZQorICAgIC8vIHdhdGNocG9pbnQgYnkgZG9pbmc6CisgICAgLy8KKyAg
ICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAg
IC8vCisgICAgLy8gdGhlbiB0aGUgREZHIHdvdWxkIG5ldmVyIGtub3cgdGhhdCB5b3UgaW52YWxp
ZGF0ZWQgc3RhdGUgYmV0d2VlbiB0aGUgdHdvIGNoZWNrcy4KKyAgICAvLworICAgIC8vIFRoZXJl
IGFyZSB0d28gd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlzOgorICAgIC8vCisgICAgLy8gLSBDYWxs
IGZpcmVBbGwoKSB3aXRob3V0IGEgaXNCZWluZ1dhdGNoZWQoKSBjaGVjay4gVGhlbiwgdGhlIERG
RyB3aWxsIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBoYXMKKyAgICAvLyAgIGJlZW4gaW52YWxp
ZGF0ZWQgd2hlbiBpdCBkb2VzIGl0cyBzZWNvbmQgY2hlY2suCisgICAgLy8KKyAgICAvLyAtIERv
IG5vdCBleHBvc2UgdGhlIHdhdGNocG9pbnQgc2V0IHRvIHRoZSBERkcgZGlyZWN0bHksIGFuZCBo
YXZlIHlvdXIgb3duIHdheSBvZiB2YWxpZGF0aW5nIHdoZXRoZXIKKyAgICAvLyAgIHRoZSBhc3N1
bXB0aW9ucyB0aGF0IHRoZSBERkcgdGhyZWFkIHVzZWQgYXJlIHN0aWxsIHZhbGlkIHdoZW4gdGhl
IERGRyBjb2RlIGlzIGluc3RhbGxlZC4KICAgICBib29sIGlzQmVpbmdXYXRjaGVkKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChpc0ZhdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEyLDcgKzIxMTIsNyBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIG5l
dyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVyZSBj
aGFpbgotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChQdXRCeUlkTm9uZSk7IC8vIGlzIG5vdCBk
aXJlY3QKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PihQdXRCeUlk
Tm9uZSkpOyAvLyBpcyBub3QgZGlyZWN0CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0yMTM0
LDcgKzIxMzQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
MCk7IC8vIHN0cnVjdHVyZSBjaGFpbiAodW51c2VkIGlmIGRpcmVjdCkKLSAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBwcm9w
ZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJZElz
RGlyZWN0IDogUHV0QnlJZE5vbmUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0aWNf
Y2FzdDxpbnQ+KChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJvcGVy
dHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJc0Rp
cmVjdCA6IFB1dEJ5SWROb25lKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05v
bmUpCiAgICAgewotICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCk7Cisg
ICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0LCBhZG1pdHRlZFR5cGVzKTsK
ICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSw3ICsxMzksNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSksIHZh
bHVlKTsKICAgICB9CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RW
YWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
KEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1p
dHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlN
b2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgyOSwxMCArMTgyOSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUu
aXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBpZiAo
dmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSkp
IHsKLSAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcigKLSAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9ncmFw
aC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCldOworICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQpOwogICAg
ICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRmln
dXJlIG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEgY29u
c3RhbnQsIG9yIG1heWJlCiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxl
PwpAQCAtMTg0MSwyMiArMTg0MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2ZSB1
cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QKICAg
ICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KICAgICAgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0aW9u
U2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
Km1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9yUHJv
cGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVzW2ld
Lm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxIHx8
IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJlc3Vs
dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE4ODAsNyArMTg3
MCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBl
bnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1
cmVTZXQoKTsKICAgICAgICAgCkBAIC0xODg4LDEyICsxODc3LDIzIEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUg
c2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1
cmUgY2hlY2sKICAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4K
ICAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkp
IHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAgICAg
ICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAg
ICBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjT3Ro
ZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotCi0gICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgCisg
ICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0LCBhZG1pdHRlZFR5cGVzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKQEAgLTIwODQsMTMgKzIwODQsMjkgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0
OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50
UHJvcGVydHkoZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIGRhdGEub2Zmc2V0KTsKLSAgICAgICAg
aWYgKHJlc3VsdCkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJl
ZXplKHJlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJd
OworCisgICAgICAgIC8vIEZJWE1FOiBUaGUgcGFydCBvZiB0aGlzIHRoYXQgaGFuZGxlcyBpbmZl
cnJlZCBwcm9wZXJ0eSB0eXBlcyByZWxpZXMgb24gQUkga25vd2luZyB0aGUgc3RydWN0dXJlCisg
ICAgICAgIC8vIHJpZ2h0IG5vdy4gVGhhdCdzIHByb2JhYmx5IG5vdCBvcHRpbWFsLiBJbiBzb21l
IGNhc2VzLCB3ZSBtYXkgcGVyZm9ybSBhbiBvcHRpbWl6YXRpb24gKHVzdWFsbHkKKyAgICAgICAg
Ly8gYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gQUksIG1heWJlIGJ5IENTRSBmb3IgZXhhbXBsZSkg
dGhhdCBvYnNjdXJlcyBBSSdzIHZpZXcgb2YgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyBhdCB0
aGUgcG9pbnQgd2hlcmUgR2V0QnlPZmZzZXQgcnVucy4gQ3VycmVudGx5LCB3aGVuIHRoYXQgaGFw
cGVucywgd2UnbGwgaGF2ZSB0byByZWx5IGVudGlyZWx5CisgICAgICAgIC8vIG9uIHRoZSB0eXBl
IHRoYXQgQnl0ZUNvZGVQYXJzZXIgd2FzIGFibGUgdG8gcHJvdmUuCisgICAgICAgIEFic3RyYWN0
VmFsdWUgdmFsdWUgPSBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRlLnN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQg
dGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgorICAg
ICAgICBBYnN0cmFjdFZhbHVlIHR5cGVGcm9tUGFyc2luZzsKKyAgICAgICAgdHlwZUZyb21QYXJz
aW5nLnNldChtX2dyYXBoLCBkYXRhLmluZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOworCisg
ICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2YWx1
ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2JhYmx5CisgICAgICAgIC8vIGJl
Y2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgorICAgICAgICBp
ZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNl
KTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1ZS5t
X3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAsNiArMjEzNiw4IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVzZSBv
ZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9ubHku
CiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAorICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcl07CisKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0cnVj
dHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTIxMjks
MTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6Q29u
c3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRDYXNlLm1ldGhvZCgp
LmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6
IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAgICAg
ICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisgICAg
ICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCisgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlz
UmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgbV9n
cmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAotICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAg
ICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0TWV0aG9kOjpMb2FkOiB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldCwgdWlkLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3Jh
cGgsIGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCkBAIC0yMTYzLDYgKzIxOTIsOCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlIGJh
c2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmln
aW5hbFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUgcmVzdWx0aW5nVmFsdWU7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwpAQCAtMjE3MCw2ICsyMjAxLDExIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIHRoaXNTZXQuZmls
dGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9
IG9yaWdpbmFsVmFsdWU7CisgICAgICAgICAgICB0aGlzVmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHZh
cmlhbnQucmVxdWlyZWRUeXBlKCkpOworICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2Uo
dGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRo
aXNTZXQub25seVN0cnVjdHVyZSgpICE9IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMjE4NSw2ICsyMjIxLDkgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNlcnZl
VHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBD
b250cmFkaWN0aW9uKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAg
aWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0
YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApA
QCAtMjI2NCwxMyArMjMwMywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7
CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1
Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNG
aW5pdGUoKSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1
cmUuc2V0KCksCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlk
RGlyZWN0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxl
KCkpIHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAg
ICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBAQCB2
b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEFic3RyYWN0U3RhdGVUeXBlPgogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0g
ICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBp
ZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlv
bk9LKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxp
ZChmYWxzZSk7CiAgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBl
KEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFj
dFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVj
Qm9vbGVhbik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6
CisgICAgICAgIHNldFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlw
ZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OlN0cmluZzoKKyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgbWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmpl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3Ro
ZXI6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhl
YXBUb3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBn
cmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRv
cik7CisgICAgaWYgKGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAg
ICAgICBjbG9iYmVyU3RydWN0dXJlcygpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5
cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlv
biwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERv
dWJsZSkgewpAQCAtMTg5LDggKzIzOSwyMiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NS
RW50cnlWYWx1ZShHCiAgICAgcmV0dXJuIG9sZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9u
UmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpCitib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAg
IEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOworICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVy
cmVkVHlwZSk7CisKKyAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAg
bWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVlKTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9
PSB0eXBlVmFsdWU7Cit9CisKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRl
ZFR5cGUgYWRtaXR0ZWRUeXBlcykKK3sKKyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3Bl
Y0NlbGwpKTsKKyAgICAKICAgICBpZiAoaXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJh
dGlvbk9LOwogICAgIApAQCAtMTk4LDcgKzI2Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJh
Y3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAvLyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMs
IG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTY2MwogICAgIAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlv
bkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0
cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlwZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFy
cmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7
CiAgICAgCkBAIC0zMTUsNiArMzc5LDEzIEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKGMKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJl
c3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJW
YWx1ZTsKKyAgICBmaWx0ZXJWYWx1ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVy
biBmaWx0ZXIoZmlsdGVyVmFsdWUpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZh
bHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRo
YXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIK
ICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1w
Q29udGV4dC5oIgpAQCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAg
ICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYpOworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZv
clJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9
IG51bGxwdHIpOwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9k
ZSopOwogICAgIApAQCAtMjgwLDE3ICsyODQsMjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgIHsKICAgICAgICAgcmV0dXJuICEobV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisK
KyAgICBib29sIGlzVHlwZShHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYp
IGNvbnN0OworCisgICAgLy8gRmlsdGVycyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVj
dHVyZSBzZXQuIElmIHRoZSBhZG1pdHRlZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRo
aXMKKyAgICAvLyBpbXBsaWNpdGx5IGZpbHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhl
IHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFyZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3Bl
Y0NlbGwuIEhlbmNlLCBhZnRlciB0aGlzIGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBo
YXZlIGFueSBub24tY2VsbCBtZW1iZXJzLiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0
ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21lIG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3
cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4K
KyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYs
IFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBG
aWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJh
dGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQg
ZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25S
ZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1
bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAg
CiAgICAgRmlsdHJhdGlvblJlc3VsdCBjaGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmKTsKICAgICAKICAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0Owot
ICAgIAorCiAgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYsOSArMjA2LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25z
dHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwg
Y29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0
QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQs
IE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQs
IE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zm
c2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNl
dChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRs
ZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3Ry
dWN0dXJlIHNldC4gRG9lcyBub3QKICAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNv
bmRpdGlvbiwgYnV0IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEg
Y29udHJhZGljdGlvbi4KQEAgLTIzMDcsNyArMjMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0
KAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9k
ZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAt
MjMxOCwxMyArMjMxOSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50
aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9
IGluZmVycmVkVHlwZTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgo
b3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJh
c2UpOwogCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRCeU9mZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5m
ZXJyZWRUeXBlLAorICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFn
ZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzUsNiArMjMzOSw3IEBA
IE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBk
YXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50
aWZpZXI7CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAogICAg
IE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgcHJv
cGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ5LDcgKzI0NTQsOCBAQCBO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlND
b25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9mZnNl
dE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUgPSBh
ZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAgICAg
ICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlm
aWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUdl
dEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZpZXJO
dW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9CiAg
ICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZlciBz
ZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTU1LDEzICsyNTYxLDEzIEBAIE5vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNrID0g
dHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChKU09iamVjdCoga25vd25C
YXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKICAgICAgICAg
Ly8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0IGl0
J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYgdGhl
IGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9tIGEg
cHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAgICAg
ICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjI2LDkgKzI2MzIsMTYgQEAg
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAgICAg
fQorCisgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CisgICAg
ICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKQorICAgICAgICAgICAgICAgIGlu
ZmVycmVkVHlwZS5tZXJnZShtX2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVy
ZSwgdWlkKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5m
ZXJyZWRUeXBlOjpUb3A7CiAgICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdl
dEJ5T2Zmc2V0KAotICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGlj
dGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRU
eXBlLCBsb2FkT3ApOwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2Mzks
NyArMjY1Miw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAg
ICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFj
ZSk7CiAKICAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAg
IHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNl
dCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZp
ZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCksIHZhbHVlKTsKIH0K
IAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTI4NTQsNiArMjg2Nyw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAg
ICAgICBkYXRhLT5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOwogICAgICAgICBkYXRhLT5pZGVu
dGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgZGF0YS0+aW5mZXJyZWRU
eXBlID0gdmFyaWFudC5yZXF1aXJlZFR5cGUoKTsKICAgICAgICAgCiAgICAgICAgIGFkZFRvR3Jh
cGgoCiAgICAgICAgICAgICBQdXRCeU9mZnNldCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUg
IkdldEJ5SWRTdGF0dXMuaCIKQEAgLTM3Myw3ICszNzQsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkg
PT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5v
ZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnJlcXVpcmVkVHlw
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ4LDYgKzQ1MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNl
VmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpOworICAgICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgdmFsdWVWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CiAKICAg
ICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVz
aCBDRkEgb3ZlciB0aGlzIG5vZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAg
ICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVm
YXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCkBAIC00NjMsNyArNDY2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0
YXR1cy5pc1NpbXBsZSgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubnVtVmFyaWFudHMoKSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygp
ID4gMSAmJiAhaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCkBAIC02NjYsNiArNjY5LDggQEAg
cHJpdmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAg
ICAgCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNr
KAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3JpZ2luLCBub2Rl
LT5jaGlsZDMoKS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogCiAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgY2hpbGRFZGdl
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUg
REZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERGRydzIGV4
cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3ZSB3YW50
IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0IHRoaXMg
b2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFzcyBEZXNp
cmVkSW5mZXJyZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKCkKKyAg
ICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVzaXJl
ZEluZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAg
ICwgbV9leHBlY3RlZChleHBlY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgRGVzaXJlZEluZmVy
cmVkVHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmpl
Y3QobnVsbHB0cikKKyAgICAgICAgLCBtX2V4cGVjdGVkKEluZmVycmVkVHlwZTo6VG9wKQorICAg
IHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bV9vYmplY3QgJiYgbV9leHBlY3RlZDsgfQorCisgICAgSW5mZXJyZWRUeXBlKiBvYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBl
eHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWQ7IH0KKworICAgIGJvb2wgaXNTdGls
bFZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuV2F0Y2go
bV9leHBlY3RlZCk7CisgICAgfQorCisgICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fb2JqZWN0LT5hZGRXYXRjaHBvaW50KHdhdGNocG9p
bnQpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNpcmVkSW5mZXJyZWRU
eXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBvdGhl
ci5tX29iamVjdAorICAgICAgICAgICAgJiYgbV9leHBlY3RlZCA9PSBvdGhlci5tX2V4cGVjdGVk
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9leHBlY3RlZCA9PSBJbmZlcnJlZFR5cGU6
OlRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBlKj46Omhhc2gobV9vYmplY3QpICsgbV9l
eHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAg
IG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwgY29udGV4dCksICIgZm9yICIsIFJhd1Bv
aW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKiBtX29iamVjdDsKKyAgICBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKK307CisKK3N0cnVjdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlw
ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkRlc2ly
ZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRU
eXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFp
dHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJy
ZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVk
VHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTEgQEAgdm9pZCBB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOgogICAgIH0KIH0KIAordm9pZCBJbmZl
cnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IERlc2lyZWRJ
bmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIGtleS5hZGQoY29t
bW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwogRGVzaXJlZFdhdGNocG9pbnRz
OjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRX
YXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBv
aW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6
aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQoreworICAgIG1faW5mZXJyZWRUeXBlcy5hZGRMYXpp
bHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpA
QCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29k
ZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEp
OwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAg
ICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0
YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEp
OwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBA
IC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQo
KQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1f
aW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVmZmVyVmlld3Mu
YXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0
aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxW
YWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAK
IHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApAQCAtMTI3LDYgKzEzOSw3IEBAIHZvaWQgRGVz
aXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFAKICAgICBvdXQucHJpbnQoIiAgICBJbmZl
cnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxu
Iik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZm
ZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIE9iamVjdCBwcm9w
ZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNv
bnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB0eXBlczogIiwgaW5D
b250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdD
b21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIgogI2luY2x1
ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCkBAIC05MSw2ICs5MiwxOCBAQCBzdHJ1
Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvCiAgICAgfQogfTsKIAorc3RydWN0
IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBj
b25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyBib29s
IGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsKKyAgICB9CisgICAgc3RhdGlj
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgb3V0LnBy
aW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFw
dG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMg
ewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1OSw2ICsxNzIsMTAgQEAgcHVibGljOgogICAg
IC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBV
c2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKICAgICAvLyB0aGUgcmVxdWly
ZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgogICAgIHZvaWQg
YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisKKyAgICAvLyBJdCdz
IHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBo
OjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9lcworICAgIC8vIHRoZSByZXF1aXJlZCBHQyBt
YWdpYy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJik7CiAg
ICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKQEAgLTE4Niw2ICsyMDMs
MTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVT
ZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBEZXNp
cmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFR5
cGVzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CkBAIC0xOTYsNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZl
cnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJW
aWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CiAg
ICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7
CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxEZXNpcmVkSW5mZXJyZWRUeXBlLCBJbmZl
cnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlwZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2lu
Y2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuaCIKQEAgLTEwOTIsNiArMTA5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBpbnNlcnRJbmZlcnJlZFR5
cGVDaGVjaygKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbV9pbmRleEluQmxvY2ss
IG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpLAorICAgICAgICAgICAgICAgIG5v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAgIHNwZWN1
bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYxLDEyICsyNjEsMTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vz
c0RhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRp
ZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAgICAg
ICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0Rh
dGEub2Zmc2V0KSk7CisgICAgICAgIG91dC5wcmludCgiLCBpbmZlcnJlZFR5cGUgPSAiLCBzdG9y
YWdlQWNjZXNzRGF0YS5pbmZlcnJlZFR5cGUpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVs
dGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0
YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbZGF0YS5p
ZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
IGluQ29udGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0KSk7CisgICAgICAgICAgICBpZiAoZGF0
YS5jYXNlc1tpXS5tZXRob2QoKS5raW5kKCkgPT0gR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQpCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGluZmVycmVkVHlwZSA9ICIsIGluZmVycmVkVmFs
dWVGb3JQcm9wZXJ0eShkYXRhLmNhc2VzW2ldLnNldCgpLCBpZGVudGlmaWVycygpW2RhdGEuaWRl
bnRpZmllck51bWJlcl0pLCAiKSIpOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChub2RlLT5o
YXNNdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRh
JiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKQEAgLTg4Nyw2ICs4OTEsMzkg
QEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLAogICAgIHJldHVybiBt
X3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9CiAK
K0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFBy
b3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFzc2VydElzUmVnaXN0ZXJlZChrZXkuc3RydWN0
dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5mZXJyZWRUeXBlcy5maW5kKGtleSk7
CisgICAgaWYgKGl0ZXIgIT0gbV9pbmZlcnJlZFR5cGVzLmVuZCgpKQorICAgICAgICByZXR1cm4g
aXRlci0+dmFsdWU7CisKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGVPYmplY3QgPSBrZXkuc3RydWN0
dXJlKCktPmluZmVycmVkVHlwZUZvcihrZXkudWlkKCkpOworICAgIGlmICghdHlwZU9iamVjdCkg
eworICAgICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOwor
ICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yIHR5cGVEZXNjcmlwdG9yID0gdHlwZU9iamVjdC0+ZGVzY3JpcHRvcigp
OworICAgIGlmICh0eXBlRGVzY3JpcHRvci5raW5kKCkgPT0gSW5mZXJyZWRUeXBlOjpUb3ApIHsK
KyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAg
ICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKyAgICAKKyAgICBtX2luZmVy
cmVkVHlwZXMuYWRkKGtleSwgdHlwZURlc2NyaXB0b3IpOworCisgICAgbV9wbGFuLndlYWtSZWZl
cmVuY2VzLmFkZExhemlseSh0eXBlT2JqZWN0KTsKKyAgICBpZiAodHlwZURlc2NyaXB0b3Iuc3Ry
dWN0dXJlKCkpCisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHR5cGVEZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKTsKKworICAgIC8vIE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0
aGlzIGRlc2lyZWQgaW5mZXJyZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1h
eQorICAgIC8vIHBvaW50IHRvIHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KKyAgICBt
X3BsYW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVj
dCwgdHlwZURlc2NyaXB0b3IpKTsKKworICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKK30KKwog
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0
ZWNvZGVMaXZlbmVzcz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQo
Y29kZUJsb2NrKTsKQEAgLTEwNjEsNyArMTA5OCw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENv
bnN0YW50UHJvcGVydHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHko
CiAgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkg
fHwgc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5p
dGUoKSkgewogICAgICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNl
dCB0byBhIHVpZCwgd2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAg
Ly8gd2F0Y2hpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiAr
MTExMywzNyBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAg
cmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0
dXJlLCBvZmZzZXQpOwogfQogCitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3Ry
YWN0VmFsdWUgcmVzdWx0OworICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAg
ICAgICAgIHZhbHVlLnNldCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJl
LCB1aWQpKTsKKyAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOwor
ICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAg
cmVzdWx0LmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJz
dHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFi
c3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKKyAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAg
IGlmIChKU1ZhbHVlIHZhbHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQp
KSB7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0
aGlzLCAqZnJlZXplKHZhbHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAg
ICByZXR1cm4gaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCks
IHVpZCwgY2xvYmJlclN0YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9w
KCk7Cit9CisKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVl
IGJhc2UsIFNjb3BlT2Zmc2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21l
IGNvbmN1cnJlbmN5IHN0b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVD
b2RlUGFyc2VyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgi
CisjaW5jbHVkZSAiREZHUHJvcGVydHlUeXBlS2V5LmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxl
LmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU1N0YWNr
LmgiCkBAIC02NzUsNiArNjc2LDIxIEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYgaXQncyBr
bm93biB0aGF0IGxvYWRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZz
ZXQgaXMgZmluZS4gVGhpcyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNv
bmRpdGlvbnMgd2UgdHJhY2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNTYWZl
VG9Mb2FkKEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBUZWxscyB1
cyB3aGF0IGluZmVycmVkIHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3BlcnR5IHRv
IGhhdmUgbm93IGFuZCBpbiB0aGUgZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciBpbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSogc3RydWN0
dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZmVy
cmVkVHlwZUZvcihQcm9wZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICB9CisKKyAg
ICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCk7CisKKyAgICAvLyBUaGlzIHVzZXMgZWl0
aGVyIGNvbnN0YW50IHByb3BlcnR5IGluZmVyZW5jZSBvciBwcm9wZXJ0eSB0eXBlIGluZmVyZW5j
ZSB0byBkZXJpdmUgYSBnb29kIGFic3RyYWN0CisgICAgLy8gdmFsdWUgZm9yIHNvbWUgcHJvcGVy
dHkgYWNjZXNzZWQgd2l0aCB0aGUgZ2l2ZW4gYWJzdHJhY3QgdmFsdWUgYmFzZS4KKyAgICBBYnN0
cmFjdFZhbHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQsIFN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxp
dmVuZXNzRm9yKENvZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVz
c0ZvcihJbmxpbmVDYWxsRnJhbWUqKTsKQEAgLTg1Niw2ICs4NzIsNyBAQCBwdWJsaWM6CiAgICAg
SGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+
PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6
cGFpcjxKU09iamVjdCosIFByb3BlcnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOworICAgIEhhc2hN
YXA8UHJvcGVydHlUeXBlS2V5LCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRU
eXBlczsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5n
IG1fcHJlUG9zdE51bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNo
ZWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5m
ZXJyZWRUeXBlQ2hlY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0aW9u
U2V0JiBpbnNlcnRpb25TZXQsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4s
IE5vZGUqIGJhc2VOb2RlLAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvdHRvbToKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgRm9yY2VPU1JFeGl0LCBvcmlnaW4pOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgQm9vbGVh
blVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6
CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENo
ZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIE90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9k
ZSwgSW50MzJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok51bWJlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgTnVtYmVyVXNlKSk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVk
Z2UoYmFzZU5vZGUsIFN0cmluZ1VzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0
cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2Rl
LCBDZWxsVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3Jp
Z2luLAorICAgICAgICAgICAgT3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVy
ZVNldCh0eXBlLnN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2RlLCBDZWxs
T3JPdGhlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0OgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNO
b25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBPYmplY3RVc2UpKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmln
aW4sIEVkZ2UoYmFzZU5vZGUsIE9iamVjdE9yT3RoZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIERGR19DUkFTSChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgYmFzZU5vZGUsICJCYWQgaW5mZXJy
ZWQgdHlwZSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZl
cnJlZFR5cGVDaGVjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5mZXJyZWRUeXBlQ2hlY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBERkdJbmZlcnJlZFR5cGVDaGVja19oCisjZGVmaW5lIERGR0luZmVycmVkVHlwZUNoZWNr
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworLy8gSW5zZXJ0cyBhIHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5v
ZGUgaGFzIHRoZSBnaXZlbiBpbmZlcnJlZCB0eXBlLgordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVD
aGVjaygKKyAgICBJbnNlcnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4s
IE5vZGUqIGJhc2VOb2RlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTEgQEAgc3RydWN0IEJh
c2ljQmxvY2s7CiBzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworCisgICAgLy8gVGhpcyBu
ZWVkcyB0byBrbm93IHRoZSBpbmZlcnJlZCB0eXBlLiBGb3IgcHV0cywgdGhpcyBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSB3ZSBuZWVkIHRvIHJlbWVtYmVyCisgICAgLy8gd2hhdCBjaGVjayBpcyBuZWVk
ZWQuIEZvciBnZXRzLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSBBSSBtaWdo
dCBmb3JnZXQgd2hhdCB0eXBlIGlzCisgICAgLy8gZ3VhcmFudGVlZC4KKyAgICBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlOwogfTsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZz
ZXREYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzNSwxNCArMjEzNSwyMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1cmVz
KSB7CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQg
IT0gY3VycmVudE9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBv
dXIgYW5hbHlzaXMgdHJlYXRzIE11bHRpUHV0QnlPZmZzZXQgbGlrZSBhbiBlc2NhcGUsIHdlIG9u
bHkgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIHN0b3Jpbmcg
cmVzdWx0cyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IHN0b3JlZCBieSBQdXRCeU9m
ZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRob3NlIG5vZGVzIHdlcmUg
Z3VhcmRlZCBieSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuIFRoaXMgbWVhbnMgdGhhdAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgY2FuIHNpbXBseSB0
cnVzdCB0aGF0IHRoZSBpbmNvbWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5cGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgYXJlIHVzaW5nLgog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1
cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9mZnNldCA9IG9mZnNldDsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuY2xlYXIoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2V0LmFkZChzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0
QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAg
ICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRU
eXBlOjpUb3ApKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGgu
YWRkTm9kZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBl
S2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0
eVR5cGVLZXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvcGVydHlUeXBlS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9w
ZXJ0eVR5cGVLZXlfaAorI2RlZmluZSBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgb2JqZWN0
IGlzIGEga2V5IGZvciBmaW5kaW5nIGEgcHJvcGVydHkncyB0eXBlLiBJdCdzIGEgdHVwbGUgb2Yg
U3RydWN0dXJlKiBhbmQgVW5pcXVlZFN0cmluZ0ltcGwqLgorCitjbGFzcyBQcm9wZXJ0eVR5cGVL
ZXkgeworcHVibGljOgorICAgIFByb3BlcnR5VHlwZUtleSgpCisgICAgICAgIDogbV9zdHJ1Y3R1
cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAg
ICBQcm9wZXJ0eVR5cGVLZXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICAsIG1fdWlk
KHVpZCkKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAg
ICAsIG1fdWlkKGRlbGV0ZWRVSUQoKSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlICYmIG1fdWlkOyB9CisKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Cisg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQorICAg
ICAgICAgICAgJiYgbV91aWQgPT0gb3RoZXIubV91aWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+Ojpo
YXNoKG1fc3RydWN0dXJlKSArIFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+OjpoYXNo
KG1fdWlkKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmUgJiYgbV91aWQgPT0gZGVsZXRl
ZFVJRCgpOworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0
LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChw
b2ludGVyRHVtcEluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwgbV91aWQpOwor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgVW5pcXVlZFN0cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0YXRpY19jYXN0PGludHB0
cl90PigxKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOworfTsKKworc3RydWN0IFByb3BlcnR5VHlwZUtleUhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJv
cGVydHlUeXBlS2V5JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0g
YjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICB0
eXBlZGVmIEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5
VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgICAgICBj
YXNlIFJlYWxOdW1iZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2Fz
ZSBDZWxsVXNlOgorICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAgICBjYXNlIE9i
amVjdFVzZToKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9i
amVjdFVzZToKQEAgLTEyNyw2ICsxMjgsOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RT
dGF0ZVR5cGUmIHN0CiAgICAgaWYgKCFzYWZlVG9FeGVjdXRlRWRnZS5yZXN1bHQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgLy8gTk9URTogVGhpcyB0ZW5kcyB0byBsaWUgd2hlbiBp
dCBjb21lcyB0byBlZmZlY3RmdWwgbm9kZXMsIGJlY2F1c2UgaXQga25vd3MgdGhhdCB0aGV5IGFy
ZW4ndCBnb2luZyB0bworICAgIC8vIGdldCBob2lzdGVkIGFueXdheS4KKwogICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0
YW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMyLDYgKzUyMzIsODAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZihOb2RlKgogICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNo
ZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUsIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUikK
K3sKKyAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKKyAgICAKKyAgICBp
ZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
CisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BSVGVtcG9yYXJ5PiBzdHJ1Y3R1cmU7CisgICAg
ICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFI7CisgICAgICAgIAorICAgICAgICBpZiAodGVtcEdQUiA9
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5p
cXVlPEdQUlRlbXBvcmFyeT4odGhpcyk7CisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9
IHRlbXBHUFI7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlR1BS
KTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgICAg
ICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5z
aXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKAorICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1
cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hX
ZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3Ry
dWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNvbXBp
bGVDaGVja1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENl
bGxPck90aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5q
c1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZVJl
Z3MpOworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVlUmVncywgbm9k
ZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoSWZOb3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG5vUmVzdWx0
KG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAg
REZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24o
KS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2MzYsNiArNTcx
MCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2UgCiAgICAgKFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0g
bV9qaXQuYnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBT
cGVjT3RoZXIsCisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFuZC5qc1ZhbHVl
UmVncygpLCB0ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNU
eXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYwMDYsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxsVXNlOgogICAg
ICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxP
ck90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdl
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMTUsNiAr
MjIxNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlw
ZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiwgR1BSUmVn
IGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVy
ZShOb2RlKik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBt
b3ZlRmFsc2VUbyhHUFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xl
YW4oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3Vs
YXRlQ2VsbE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSk7CiAg
ICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZpbmFs
T2JqZWN0KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBTdHJ1
Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAg
CisKICAgICAvLyBJbiBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB2
ZXJpZnkgd2hldGhlciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQsIGFuZAogICAgIC8vIGlm
IG5vdCwgZW51bWVyYXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMgb25seSBpbiBj
YXNlcyB3aGVyZSB0aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBtZWFuaW5nZnVsbHkgc3Bl
Y2lhbCwgbGlrZSBmb3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAyLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gbV9zZXQub25seVN0
cnVjdHVyZSgpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0b3IpOworICAg
IH0KICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4
dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OSw2ICs3OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBV
c2UKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnByaW50KCJLbm93bkNlbGwi
KTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIG91
dC5wcmludCgiQ2VsbE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0
VXNlOgogICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTg5ODEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkJvb2xlYW5Vc2UsCiAg
ICAgQ2VsbFVzZSwKICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9yT3RoZXJVc2UsCiAgICAg
T2JqZWN0VXNlLAogICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2JqZWN0VXNlLApAQCAtMTA4
LDYgKzEwOSw4IEBAIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAg
ICBjYXNlIENlbGxVc2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIHJldHVybiBT
cGVjQ2VsbDsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0Nl
bGwgfCBTcGVjT3RoZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVj
T2JqZWN0OwogICAgIGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxOCw2ICs0MTgsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3Jh
cGgpCiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICAg
ICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAg
ICAgICAgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBP
YmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgICAg
ICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMjYsMjEgKzIwMjYsNTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBp
bGVDaGVja1N0cnVjdHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0S2luZDsK
ICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJl
SUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAg
ICAgICAKLSAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVJRCwg
anNWYWx1ZVZhbHVlKGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKLSAg
ICAgICAgICAgIFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKKwor
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNh
c2UgQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAg
ICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
SUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9k
ZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Q2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOworCisgICAgICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5U
eXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxD
YXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBqc1ZhbHVlVmFsdWUodmFsdWUpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBt
X25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChz
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVy
KHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwo
KQpAQCAtNDAyMiw2ICs0MDU3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsg
MV0gOiBleGl0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07CisKKyAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBl
KG1fbm9kZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKQEAgLTU2NzQsNiArNTcx
MSwxMzUgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CiAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMp
OwogICAgIH0KKworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUg
dmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNh
dXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAgICAgICAv
LworICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8vCisgICAg
ICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgc3dp
dGNoIChvYmplY3QtPnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoKKyAgICAg
ICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAgICAgLy8g
ICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgIGNh
c2UgNDM6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7
CisgICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAg
ICAgIC8vICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBl
MiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVk
Z2Ugd291bGQgYmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVh
ZCBvZiB0eXBlMSB8IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQo
KSkgeworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5i
b29sZWFuVHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPdGhlcjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RD
ZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVl
KGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJl
KCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAg
ICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBu
b3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZl
cnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9uIikpOworCisg
ICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwg
dW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNl
KTsKKworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlz
U3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJl
SUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RD
ZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAg
ICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAg
ICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0Nl
bGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6
CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBp
c05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJ
bmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJl
ZFR5cGUgT2JqZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVk
VHlwZSBPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSks
IHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAg
IHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBp
c05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJh
ZCBpbmZlcnJlZCB0eXBlIik7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb2FkUHJvcGVydHko
TFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKICAgICB7CkBAIC03NTE0LDYgKzc2ODAsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENlbGxVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAgICBzcGVj
dWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEtub3duQ2VsbFVzZToKICAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5
cGVDaGVjayhlZGdlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc1OTQsNiArNzc2MywyMiBA
QCBwcml2YXRlOgogICAgICAgICBsb3dDZWxsKGVkZ2UpOwogICAgIH0KICAgICAKKyAgICB2b2lk
IHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAg
ICAgICBMQmFzaWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1
bGF0ZSBDZWxsT3JPdGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgY29u
dGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2VsbCkpOwor
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RDZWxs
LCBjb250aW51YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc3BlY3VsYXRl
TWFjaGluZUludChFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIu
bmVlZHNUeXBlQ2hlY2soZWRnZSkpCkBAIC04MTI3LDYgKzgzMTIsOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9v
dXQuYm9vbGVhbkZhbHNlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIEFTU0VSVCht
X2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmluYWxpemVy
LT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUt
Pm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCkBAIC04MTM1LDkgKzgzMjMsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRz
KCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JF
eGl0Q29tcGlsYXRpb25JbmZvKCkpOwotICAgICAgICAKKwogICAgICAgICBPU1JFeGl0JiBleGl0
ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKIAorICAgICAgICBpZiAoZmFp
bENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuVHJ1ZSkgeworICAgICAgICAgICAgZW1pdE9TUkV4
aXRDYWxsKGV4aXQsIGxvd1ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODk4MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDYgKzU1LDcwIEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+JiBBc3NlbWIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorQXNz
ZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgK
KyAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExp
c3QgcmVzdWx0OworCisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEJvb2xlYW4ocmVncywgdGVtcEdQUikpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RJbnQzMihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJl
cihyZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6OlN0cmluZzoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykp
OworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3MucGF5bG9hZEdQ
UigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3Mp
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIHJlZ3Mu
cGF5bG9hZEdQUigpLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7Cisg
ICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJh
bmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0g
YnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFu
Y2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpwdXJpZnlOYU4oRlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBu
b3ROYU4gPSBicmFuY2hEb3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzE5LDYgKzcxOSw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAg
IEp1bXBMaXN0IGJyYW5jaElmTm90VHlwZShKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQ
UiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogICAgIEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzcsNyArMzc3LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJ
RAogICAgICAgICAgICAgcHRyZGlmZl90IG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UgPSBvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAg
ICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRU
b1BhdGNoZWRTdG9yYWdlKQotICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1
Y3R1cmUtPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CiAKICAgICAgICAgICAgICAg
ICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMzLDYgKzYzMyw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgcGNbNV0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8g
b2Zmc2V0CiAgICAgICAgIHBjWzZdLnUucG9pbnRlciA9IG51bGxwdHI7IC8vIG5ldyBzdHJ1Y3R1
cmUKICAgICAgICAgcGNbN10udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gc3RydWN0dXJlIGNoYWlu
CisgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4ocGNbOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkUGVyc2lzdGVudEZs
YWdzTWFzayk7CiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1
Y3R1cmUoKTsKQEAgLTY2MCwxMiArNjYyLDE4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVj
dHVyZUNoYWluLnNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51
LnB1dEJ5SWRGbGFncyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5p
bmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNl
bWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgcGNbNF0udS5z
dHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKICAgICAgICAgICAgICAgICBwY1s1XS51Lm9w
ZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0
QnlJZEZsYWdzID0gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAgICAgICAgICAgICAgICAg
ICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgfAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUt
PmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoaWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyNjUsMTQgKzEyNjUsODcgQEAgX2xsaW50
X29wX3B1dF9ieV9pZDoKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxs
KHQzLCB0MCwgLm9wUHV0QnlJZFNsb3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlE
W3QwXSwgdDIKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmluZXEgdDIs
IHQxLCAub3BQdXRCeUlkU2xvdworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MikKKyAg
ICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAog
ICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJyZW50IHN0
cnVjdHVyZSBJRAorICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+
IG9iamVjdCBiYXNlCiAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig4
LCB0MSkKKworICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVj
dCBiYXNlCisgICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1cnJlbnQg
c3RydWN0dXJlIElECisgICAgIyB0MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56IHQxLCBQ
dXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIKKworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlw
ZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTWFzaywgdDEKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9w
UHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhl
IGZvbGxvd2luZzogU3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAgIGJwbHQg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVj
a0xlc3NUaGFuT2JqZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3Ro
ZXIgb3IgVG9wLgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRC
eUlkRG9uZUNoZWNraW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3Ro
ZXIuCisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorLm9w
UHV0QnlJZFR5cGVDaGVja090aGVyOgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDMKKyAg
ICBicWVxIHQzLCBWYWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGpt
cCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90
aGVyOgorICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0cW56IHQz
LCB0YWdNYXNrLCAub3BQdXRCeUlkU2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0NlbGw6Om1f
dHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGpt
cCAub3BQdXRCeUlkU2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBiYmFlcSBK
U0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBl
cworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5T
dHJpbmc6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVh
biwgT3RoZXIsIEludDMyLCBOdW1iZXIKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZUludDMyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBXZSBhcmUg
ZWl0aGVyIEludDMyIG9yIE51bWJlci4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU51bWJlciwgLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcgorCisgICAgYnFhZXEgdDMsIHRhZ1R5
cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlk
U2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0YWdUeXBl
TnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNs
b3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25l
IG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBuZXEgdDEs
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9y
T3RoZXIKKyAgICB4b3JxIFZhbHVlRmFsc2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5
SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlk
VHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
KworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJ0
cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlLCAub3BQdXRCeUlk
VHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZQorICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQ
dXRCeUlkVHlwZUNoZWNrT3RoZXIKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1
Y3R1cmU6CisgICAgdXJzaGlmdHAgMywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBidGl6IHQxLCAu
b3BQdXRCeUlkTm90VHJhbnNpdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTg5ODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBMb3dlc3RUYWcg
PSBEZWxldGVkVmFsdWVUYWcKIGVuZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVzdCBi
ZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0IFB1dEJ5SWRQ
cmltYXJ5VHlwZU1hc2sgPSAweDYKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9
IDB4MAorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4Mgor
Y29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQK
K2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1dEJ5SWRTZWNv
bmRhcnlUeXBlQm90dG9tID0gMHgwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4g
PSAweDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitjb25zdCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVO
dW1iZXIgPSAweDIwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgKK2Nv
bnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVU
b3AgPSAweDQwCisKIGNvbnN0IENhbGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQgb3IgQVJN
NjQgb3IgQ19MT09QCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTE4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6
OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5m
ZXJyZWRUeXBlKSB9OworCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZTo6Y3JlYXRlKFZNJiB2
bSkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEluZmVycmVkVHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZSh2bSk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZSogaW5m
ZXJyZWRUeXBlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisgICAgaW5mZXJy
ZWRUeXBlLT5JbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsKK30KKworU3RydWN0dXJlKiBJ
bmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRU
eXBlKiBpbmZlcnJlZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisKKyAgICBp
ZiAoaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRp
dGlvbmFsRmluYWxpemVyKCZpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJlLT5tX2ZpbmFsaXplcik7
Cit9CisKK0luZmVycmVkVHlwZTo6S2luZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRC
eUlkRmxhZ3MgZmxhZ3MpCit7CisgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlw
ZU1hc2spIHsKKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAgICAg
c3dpdGNoIChmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgICAgICBjYXNl
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tOgorICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsK
KyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW46CisgICAgICAgICAgICBy
ZXR1cm4gQm9vbGVhbjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyOgor
ICAgICAgICAgICAgcmV0dXJuIE90aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlSW50MzI6CisgICAgICAgICAgICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVOdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gTnVtYmVyOworICAgICAg
ICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0
cmluZzsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdDoKKyAgICAgICAg
ICAgIHJldHVybiBPYmplY3Q7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmpl
Y3RPck90aGVyOgorICAgICAgICAgICAgcmV0dXJuIE9iamVjdE9yT3RoZXI7CisgICAgICAgIGNh
c2UgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3A6CisgICAgICAgICAgICByZXR1cm4gVG9wOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBCb3R0b207CisgICAgICAgIH0KKyAgICBjYXNlIFB1dEJ5SWRQ
cmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBPYmplY3RXaXRo
U3RydWN0dXJlOworICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gQm90dG9tOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHJldHVybiBCb29sZWFuOworICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKQorICAgICAgICByZXR1cm4gTnVtYmVyOworICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkgeworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYg
KGNlbGwtPmlzU3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAgICBp
ZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBEZXNjcmlwdG9yKE9iamVjdFdpdGhTdHJ1Y3R1cmUsIGNlbGwtPnN0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIFRvcDsKK30KKworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvcjo6Zm9yRmxhZ3MoVk0mIHZtLCBQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7CisgICAgS2lu
ZCBraW5kID0ga2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsK
KyAgICBpZiAoaGFzU3RydWN0dXJlKGtpbmQpKQorICAgICAgICBzdHJ1Y3R1cmUgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKTsKKyAgICBl
bHNlCisgICAgICAgIHN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIERlc2NyaXB0b3Io
a2luZCwgc3RydWN0dXJlKTsKK30KKworUHV0QnlJZEZsYWdzIEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvcjo6cHV0QnlJZEZsYWdzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgQm90dG9tOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQ
dXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSk7
CisgICAgY2FzZSBCb29sZWFuOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZs
YWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJv
b2xlYW4pOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT3RoZXIpOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
dXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlSW50MzIpOworICAgIGNhc2UgTnVtYmVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZU51bWJlcik7CisgICAgY2FzZSBTdHJpbmc6CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlU3RyaW5nKTsKKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwg
UHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QpOworICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBl
U2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyKTsKKyAgICBjYXNl
IFRvcDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFBy
aW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3ApOworICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oCisgICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJl
IHwgZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICBjYXNlIE9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJ
ZEZsYWdzPigKKyAgICAgICAgICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyIHwgZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUHV0QnlJZE5v
bmU7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjptZXJnZShjb25zdCBEZXNj
cmlwdG9yJiBvdGhlcikKK3sKKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAob3RoZXIubV9raW5kID09IEJvdHRvbSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0aGlz
ID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2FzZSBT
dHJpbmc6CisgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBP
dGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAg
ICAgICAgICAgbV9raW5kID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBOdW1i
ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAq
dGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgTnVt
YmVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEludDMy
OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVj
dFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAg
ICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRoaXMg
PSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVj
dE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAg
ICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAg
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RP
ck90aGVyOgorICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0
T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2Fz
ZSBPYmplY3RPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE90aGVyOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMg
PSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIFRvcDoKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpyZW1vdmVTdHJ1Y3R1cmUoKQor
eworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAg
ICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisK
K2Jvb2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpzdWJzdW1lcyhjb25zdCBEZXNjcmlwdG9y
JiBvdGhlcikgY29uc3QKK3sKKyAgICBEZXNjcmlwdG9yIG1lcmdlZCA9ICp0aGlzOworICAgIG1l
cmdlZC5tZXJnZShvdGhlcik7CisgICAgcmV0dXJuICp0aGlzID09IG1lcmdlZDsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7
CisgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICBvdXQucHJpbnQoIjoiLCBpbkNvbnRleHQo
Km1fc3RydWN0dXJlLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChv
dXQsIG51bGxwdHIpOworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZShWTSYgdm0pCisg
ICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX3dh
dGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQoreworfQorCitJbmZlcnJlZFR5cGU6On5JbmZl
cnJlZFR5cGUoKQoreworfQorCitib29sIEluZmVycmVkVHlwZTo6Y2FuV2F0Y2goY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sK
KyAgICBpZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0gZXhwZWN0ZWQ7Cit9CisKK2Jv
b2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkKK3sK
KyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBjYW5X
YXRjaChsb2NrZXIsIGV4cGVjdGVkKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNo
cG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50KiB3YXRj
aHBvaW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKS5raW5kKCkg
IT0gVG9wKTsKKworICAgIG1fd2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCit7
CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBhZGRXYXRjaHBv
aW50KGxvY2tlciwgd2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhpcyks
ICI6IiwgZGVzY3JpcHRvcigpKTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9yZVZh
bHVlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICBEZXNjcmlwdG9yIG15VHlwZSA9IGRlc2NyaXB0b3IobG9j
a2VyKTsKKyAgICBEZXNjcmlwdG9yIG90aGVyVHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZh
bHVlKTsKKworICAgIG15VHlwZS5tZXJnZShvdGhlclR5cGUpOworCisgICAgQVNTRVJUKGRlc2Ny
aXB0b3IobG9ja2VyKSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBp
ZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgc2V0KGxvY2tlciwgdm0sIG15VHlwZSk7
CisKKyAgICByZXR1cm4ga2luZChsb2NrZXIpICE9IFRvcDsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6Om1ha2VUb3BTbG93KFZNJiB2bSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIHNldChsb2NrZXIsIHZtLCBUb3ApOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBEZXNj
cmlwdG9yIG5ld0Rlc2NyaXB0b3IpCit7CisgICAgLy8gV2Ugd2lsbCB0cmlnZ2VyIHdyaXRlIGJh
cnJpZXJzIHdoaWxlIGhvbGRpbmcgb3VyIGxvY2suIEN1cnJlbnRseSwgd3JpdGUgYmFycmllcnMg
ZG9uJ3QgR0MsIGJ1dCB0aGF0CisgICAgLy8gY291bGQgY2hhbmdlLiBJZiBpdCBkb2VzLCB3ZSBk
b24ndCB3YW50IHRvIGRlYWRsb2NrLiBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSB1c2VkCisgICAg
Ly8gR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxl
ciBpcyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCisgICAgLy8gYSBn
b29kIGlkZWEuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworICAgIAor
ICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2luZyB0aGUgdHlw
ZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChkZXNjcmlwdG9y
KGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhl
IG5ldyBkZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIHByZXZpb3VzIG9u
ZS4KKyAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJzdW1lcyhkZXNjcmlwdG9yKGxvY2tlcikp
KTsKKworICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRvcnMgaGF2ZSBkaWZmZXJlbnQgc3RydWN0
dXJlcywgdGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNlIG9uZSBpcyBudWxsLgorICAgIGlmIChk
ZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0gbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUo
KSkKKyAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgfHwgIW5l
d0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8gV2UgYXJlIGNoYW5naW5nIHRoZSB0
eXBlLCBzbyBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUgd2FzIHdhdGNoaW5nLCB0aGV5IGZpbmQg
b3V0IGFib3V0IGl0IG5vdy4gSWYKKyAgICAvLyBhbnlvbmUgaXMgd2F0Y2hpbmcsIHdlIG1ha2Ug
c3VyZSB0byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24ndCBkbyB0aGlzIHNvcnQgb2YgdGhpbmcg
YWdhaW4uCisgICAgaWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IENsZWFyV2F0Y2hwb2lu
dCkgeworICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVuIGludmFsaWRhdGVkLCBzaW5jZSBp
ZiB3ZSB3ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBUb3AuCisgICAgICAgIEFTU0VSVCht
X3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKKworICAgICAgICAvLyBX
ZSdyZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdzIGJlY2F1c2Ugc29tZSBjb21waWxlciB0
aHJlYWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5kCisgICAgICAgIC8vIHRoZW4gdGhl
IHR5cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBjcmF6eSwgYW5kIGRv
bid0IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgorICAgICAgICAvLyBpdC4KKyAgICAgICAg
bmV3RGVzY3JpcHRvciA9IFRvcDsKKworICAgICAgICBtX3dhdGNocG9pbnRTZXQuZmlyZUFsbCgi
SW5mZXJyZWQgdHlwZSBjaGFuZ2VkIik7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHRoZSBvbGQg
SW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgIGlm
ICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBudWxs
cHRyOworCisgICAgLy8gQWRkIGEgbmV3IEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBu
ZWVkIG9uZSBub3cuCisgICAgaWYgKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpIHsKKyAgICAg
ICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWdyZWUgb24g
dGhlIHN0cnVjdHVyZXMgaWYgd2UgZ2V0IGhlcmUuCisgICAgICAgICAgICBBU1NFUlQobmV3RGVz
Y3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPElu
ZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hw
b2ludCgmbV9zdHJ1Y3R1cmUtPm1fd2F0Y2hwb2ludCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KKyAgICBtX2tpbmQgPSBuZXdE
ZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2VydCB0aGF0IHdlIGRpZCB0aGluZ3MuCisg
ICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgVk0mIHZtID0gKkhlYXA6
OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2spOworICAgIAorICAgIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvciA9IGRlc2NyaXB0b3IobG9j
a2VyKTsKKyAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVyZSgpOworICAgIAorICAgIHNl
dChsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6Oklu
ZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZpcmVEZXRhaWwm
KQoreworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CisgICAgICAg
IGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAorICAgICAgICAgICAgYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgbV93
YXRjaHBvaW50KSk7CisKKyAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQtPnJlbW92ZVN0
cnVjdHVyZSgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVGaW5h
bGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBJbmZlcnJlZFN0cnVjdHVy
ZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1
Y3R1cmUqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1Rf
T0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fZmluYWxpemVyKSk7CisKKyAgICBBU1NFUlQo
SGVhcDo6aXNNYXJrZWQoaW5mZXJyZWRTdHJ1Y3R1cmUtPm1fcGFyZW50KSk7CisgICAgCisgICAg
aWYgKCFIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9zdHJ1Y3R1cmUuZ2V0KCkp
KQorICAgICAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQtPnJlbW92ZVN0cnVjdHVyZSgp
OworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJlZFN0cnVjdHVy
ZShWTSYgdm0sIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBwYXJlbnQsIHN0cnVj
dHVyZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAg
ICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBvdXQucHJpbnQoIklu
dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgor
ICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgb3V0LnByaW50
KCJPYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG91dC5wcmludCgi
VG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZV9oCisjZGVmaW5lIEluZmVycmVkVHlwZV9oCisK
KyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2lu
Y2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZlcmVuY2Ug
b2YgdGhlIHR5cGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgorCitjbGFzcyBJbmZlcnJlZFR5cGUg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OworCisgICAgc3RhdGljIEluZmVycmVkVHlwZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgZW51bSBLaW5k
IDogdWludDhfdCB7CisgICAgICAgIEJvdHRvbSwKKyAgICAgICAgQm9vbGVhbiwKKyAgICAgICAg
T3RoZXIsCisgICAgICAgIEludDMyLAorICAgICAgICBOdW1iZXIsCisgICAgICAgIFN0cmluZywK
KyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZSwKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXIsCisgICAgICAgIE9iamVjdCwKKyAgICAgICAgT2JqZWN0T3JPdGhlciwKKyAgICAg
ICAgVG9wCisgICAgfTsKKworICAgIHN0YXRpYyBLaW5kIGtpbmRGb3JGbGFncyhQdXRCeUlkRmxh
Z3MpOworICAgIAorICAgIHN0YXRpYyBib29sIGhhc1N0cnVjdHVyZShLaW5kIGtpbmQpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIERlc2NyaXB0b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQoQm90dG9tKQor
ICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBu
dWxscHRyKQorICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAgICwgbV9zdHJ1
Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
RGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRv
ciBmb3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0g
Qm90dG9tICYmICFtX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKKyAgICAgICAgUHV0QnlJZEZsYWdzIHB1
dEJ5SWRGbGFncygpIGNvbnN0OworCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmNsdWRl
c1ZhbHVlKEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgICAgICAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzQm9vbGVhbigpOworICAgICAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICAgICAgICAgIGNhc2Ug
SW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKyAgICAgICAg
ICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc051bWJlcigp
OworICAgICAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmlzU3RyaW5nKCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBU
b3A6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAg
ICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSBeIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOworICAgICAgICB9CisgICAgCisgICAgICAgIHZv
aWQgbWVyZ2UoY29uc3QgRGVzY3JpcHRvciYpOworICAgICAgICB2b2lkIHJlbW92ZVN0cnVjdHVy
ZSgpOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRlc2NyaXB0b3IgaXMgbW9y
ZSBnZW5lcmFsIHRoYW4gdGhlIG90aGVyIG9uZS4KKyAgICAgICAgYm9vbCBzdWJzdW1lcyhjb25z
dCBEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBLaW5kIG1fa2luZDsKKyAgICAg
ICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAgQ29uY3VycmVudEpJVExv
Y2smIGxvY2soKSBjb25zdCB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIERlc2NyaXB0b3IgZGVz
Y3JpcHRvck1haW5UaHJlYWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIERlc2NyaXB0
b3IobV9raW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSA6IG51bGxw
dHIpOworICAgIH0KKyAgICAKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVzY3JpcHRvck1h
aW5UaHJlYWQoKTsKKyAgICB9CisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
IHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZChj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0
b3IobG9ja2VyKS5raW5kKCk7IH0KKworICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQgPT0gVG9wOyB9CisgICAgYm9vbCBpc1JlbGV2YW50KCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kICE9IFRvcDsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUg
aXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdCByZWxldmFudCBpZiBp
dCdzIFRvcC4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mIHZtLCBK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRGVzY3JpcHRvciBjdXJyZW50RGVzY3JpcHRv
ciA9IGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7CisgICAgICAgIGlmIChjdXJyZW50RGVzY3JpcHRv
ci5pbmNsdWRlc1ZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGVzY3Jp
cHRvci5raW5kKCkgIT0gVG9wOworICAgICAgICByZXR1cm4gd2lsbFN0b3JlVmFsdWVTbG93KHZt
LCB2YWx1ZSk7CisgICAgfQorCisgICAgLy8gSW1tZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGly
cmVsZXZhbnQuCisgICAgdm9pZCBtYWtlVG9wKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIChp
c1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYWtlVG9wU2xvdyh2bSk7Cisg
ICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5zZSB0
byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRoYXQK
KyAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgorICAgIGJvb2wg
Y2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlw
dG9yJik7CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7CisgICAgCisgICAg
dm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0
Y2hwb2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5
cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAgICBib29sIHdpbGxTdG9yZVZhbHVl
U2xvdyhWTSYsIEpTVmFsdWUpOworICAgIHZvaWQgbWFrZVRvcFNsb3coVk0mKTsKKyAgICB2b2lk
IHNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBEZXNjcmlwdG9yKTsKKyAgICB2
b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBt
X2xvY2s7CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKKworICAgIGNsYXNzIElu
ZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJy
aWRlOworICAgIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplciA6IHB1
YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVy
cmVkU3RydWN0dXJlRmluYWxpemVyKCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNz
IEluZmVycmVkU3RydWN0dXJlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVkVHlwZSog
cGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEluZmVycmVkVHlwZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVy
cmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3Ry
dWN0dXJlRmluYWxpemVyOworICAgICAgICAKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVu
dDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsKKyAgICAgICAgSW5m
ZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgbV9maW5hbGl6ZXI7CisgICAgfTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RF
OiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0
aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQorICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0
Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMg
bmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8gdGhyZWFkLiBUaGUgREZHIHdpbGwgdXNl
IHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxp
bmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRh
YmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlw
ZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsK
KworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQor
eworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsK
KyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJ
bmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJl
ZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVU
YWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBl
VGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5
cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihj
ZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGluZmVycmVkVHlwZVRhYmxl
LT5tX2xvY2spOworICAgIAorICAgIGZvciAoYXV0byYgZW50cnkgOiBpbmZlcnJlZFR5cGVUYWJs
ZS0+bV90YWJsZSkgeworICAgICAgICBpZiAoZW50cnkudmFsdWUtPmlzUmVsZXZhbnQoKSkKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyeS52YWx1ZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGVudHJ5LnZhbHVlLmNsZWFyKCk7CisgICAgfQorfQorCitJbmZlcnJlZFR5cGUq
IEluZmVycmVkVHlwZVRhYmxlOjpnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgYXV0byBpdGVyID0gbV90YWJsZS5maW5kKHVpZCk7
CisgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgLy8gVGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHBydW5l
IGludmFsaWRhdGVkIHR5cGVzLgorICAgIGlmICghaXRlci0+dmFsdWUtPmlzUmVsZXZhbnQoKSkg
eworICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisKK0luZmVycmVkVHlw
ZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGdldChsb2Nr
ZXIsIHVpZCk7Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBnZXQocHJvcGVydHlOYW1lLnVp
ZCgpKTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUoCisgICAg
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBTdG9yZWRQ
cm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0
aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAg
CisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0eSkgeworICAgICAgICBUYWJsZVR5cGU6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgaWYg
KGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3AuCisgICAgICAgIAorICAgICAg
ICBpZiAoaXRlci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUYWJsZVR5cGU6OkFkZFJlc3VsdCBy
ZXN1bHQ7CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUudWlkKCksIFdyaXRl
QmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOworICAgIH0KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6
OmNyZWF0ZSh2bSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCBpbmZlcnJlZFR5cGUpOworICAgIH0g
ZWxzZSBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0s
IHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5jbGVhcigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGVUYWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFN0b3Jl
ZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9u
IHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAg
ICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFRhYmxlVHlwZTo6aXRlcmF0b3Ig
aXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoaXRl
ciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsg
Ly8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKworICAgICAgICBpdGVyLT52YWx1ZS0+bWFr
ZVRvcCh2bSk7CisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBUYWJsZVR5cGU6OkFkZFJlc3VsdCByZXN1bHQ7CisgICAgeworICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXN1bHQgPSBt
X3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUudWlkKCksIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+
KCkpOworICAgIH0KKyAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tYWtlVG9wKHZtKTsKKyAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cit9CisKK0luZmVycmVkVHlwZVRhYmxl
OjpJbmZlcnJlZFR5cGVUYWJsZShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5
cGVUYWJsZVN0cnVjdHVyZS5nZXQoKSkKK3sKK30KKworSW5mZXJyZWRUeXBlVGFibGU6On5JbmZl
cnJlZFR5cGVUYWJsZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlVGFibGVf
aAorI2RlZmluZSBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKyNpbmNsdWRlICJJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21lIHN0cnVj
dHVyZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUgU3RydWN0
dXJlCisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8gbWFuYWdlLiBG
b3IgZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRoaW5nCisv
LyBjYW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMgaXMgc2Vw
YXJhdGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCisvLyB3aWxs
IG5vdCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFyZSBpbiBk
aWN0aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFzIGJlaW5nICJh
IHByb3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMgd2lsbCBoYXBwaWx5IGNv
bmZsYXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KKy8vIGRpZmZlcmVudCBzdHJ1Y3R1
cmVzIGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pvaW50IHNldHMgb2Ygb2Jq
ZWN0cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEluZmVycmVk
VHlwZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9y
dGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIHsg
cmV0dXJuIG1fbG9jazsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV90
YWJsZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIEdldCB0aGUgY3VycmVudCBpbmZlcnJlZCB0eXBl
LiBSZXR1cm5zIG51bGxwdHIgZm9yIGJvdGggVG9wIGFuZCBCb3R0b20uIE51bGwgbWVhbnMgQm90
dG9tIGlmIHRoZQorICAgIC8vIG93bmluZyBTdHJ1Y3R1cmUgZG9lc24ndCBrbm93IGFib3V0IHRo
ZSBwcm9wZXJ0eS4KKyAgICBJbmZlcnJlZFR5cGUqIGdldChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChVbmlxdWVk
U3RyaW5nSW1wbCopOworICAgIEluZmVycmVkVHlwZSogZ2V0KFByb3BlcnR5TmFtZSk7CisKKyAg
ICBlbnVtIFN0b3JlZFByb3BlcnR5QWdlIHsKKyAgICAgICAgTmV3UHJvcGVydHksCisgICAgICAg
IE9sZFByb3BlcnR5CisgICAgfTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIElu
ZmVycmVkVHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUg
c3RvcmUuIEl0J3Mgbm90CisgICAgLy8gcmVsZXZhbnQgaWYgaXQncyBUb3AuIE5vdGUgdGhhdCB0
aGlzIHRhYmxlIHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3AgZW50cmllcy4KKyAgICBib29sIHdp
bGxTdG9yZVZhbHVlKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBTdG9yZWRQcm9wZXJ0eUFn
ZSk7CisKKyAgICAvLyBJbnZhbGlkYXRlcyB0aGUgdHlwZSBmb3IgdGhlIHByb3BlcnR5LiBVc2Vm
dWwgaWYgd2UgZGV0ZWN0IGEgc3RvcmUgaW4gYSByZWZsZWN0aXZlIGNvbnRleHQuCisgICAgdm9p
ZCBtYWtlVG9wKFZNJiwgUHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSk7CisKK3ByaXZh
dGU6CisgICAgSW5mZXJyZWRUeXBlVGFibGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlVGFibGUo
KTsKKworICAgIC8vIEJvdHRvbTogYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vIFRvcDogbnVs
bCB2YWx1ZSBpbiB0YWJsZSwgIXZhbHVlLT5pc1JlbGV2YW50KCksIG9yIGFic2VuY2UgZnJvbSB0
YWJsZS4KKyAgICAvLworICAgIC8vIFdlIGtub3cgaG93IHRvIGRldGVybWluZSBpZiBhYnNlbmNl
IGZyb20gdGhlIHRhYmxlIGlzIGJvdHRvbSBvciB0b3AgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhl
CisgICAgLy8gcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgb3duaW5nIHN0cnVjdHVyZS4gSGVu
Y2UsIGRlcGVuZGluZyBvbiB0aGUgc3RydWN0dXJlLCBhYnNlbmNlIG1heSBoYXZlCisgICAgLy8g
ZGlmZmVyZW50IG1lYW5pbmdzLiBUaGUgd2F5IHRoYXQgdGhpcyBjbGFzcyBkZXRlcm1pbmVzIGlm
IHRoZSBvd25pbmcgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eQorICAgIC8vIGlzIHRo
YXQgd2UgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFjdGlvbnM6IHJlcGxhY2Ugb3IgdHJhbnNpdGlv
bi4gSWYgd2UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5CisgICAgLy8gKHRyYW5zaXRpb24pLCB0
aGVuIGFic2VuY2UgbWVhbnMgYm90dG9tLiBJZiB3ZSdyZSBzdG9yaW5nIHRvIGFuIGV4aXN0aW5n
IHByb3BlcnR5IChyZXBsYWNlLCB0aGVuCisgICAgLy8gYWJzZW5jZSBtZWFucyB0b3AuIFRvIG1h
a2UgdGhpcyB3b3JrLCB3ZSBoYXZlIHRvIHdhdGNoIG91dCBmb3IgdGhlIGNhc2Ugd2hlcmUgdHdv
IHN0cnVjdHVyZXMsIFMxIGFuZAorICAgIC8vIFMyLCBzaGFyZSB0aGUgc2FtZSBJbmZlcnJlZFR5
cGVUYWJsZSBhbmQgbmVpdGhlciBvZiB0aGVtIGluaXRpYWxseSBrbm93IGFib3V0IHByb3BlcnR5
IFAuIFMxIG1heQorICAgIC8vIHdhbnQgdG8gYWRkIFAgd2l0aG91dCBhIHR5cGUsIHdoaWxlIFMy
IG1heSB3YW50IHRvIGFkZCBQIHdpdGggYSB0eXBlLiBJZiBTMSBhZGRlZCBQIGFuZCB1c2VkIGFi
c2VuY2UKKyAgICAvLyB0byBpbmRpY2F0ZSBUb3AsIHRoZW4gUzIgd291bGQgdXNlIHRoYXQgYWJz
ZW5jZSB0byBtZWFuIEJvdHRvbSBhbmQgd291bGQgZW5kIHVwIGNyZWF0aW5nIGEgbm9uLVRvcAor
ICAgIC8vIGVudHJ5IGluIHRoZSB0YWJsZS4gVGhlbiBTMSB3b3VsZCBmb3JnZXQgdGhhdCBpdCB3
YW50ZWQgVG9wLCBhbmQgd291bGQgdXNlIFMyJ3MgdHlwZS4gQ2xlYXJseSwKKyAgICAvLyB0aGF0
J3MgYmFkLiBXZSBhdm9pZCBzdWNoIGNvbmZ1c2lvbiBieSBlbnN1cmluZyB0aGF0IGEgdHJhbnNp
dGlvbiBhbHdheXMgYWRkcyBhbiBlbnRyeS4gSGVuY2UsCisgICAgLy8gYWJzZW5jZS1tZWFucy1i
b3R0b20gb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIHByb3BlcnRpZXMgYWRkZWQgYmVmb3JlIHRo
ZSBJbmZlcnJlZFR5cGVUYWJsZSB3YXMKKyAgICAvLyBjcmVhdGVkLgorICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBl
PiwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8VW5pcXVlZFN0cmluZ0ltcGwqPj4gVGFi
bGVUeXBlOworICAgIAorICAgIFRhYmxlVHlwZSBtX3RhYmxlOworCisgICAgLy8gV2Ugb25seSBn
cmFiIHRoaXMgbG9jayB3aGVuIHdlJ3JlIGRvaW5nIG1vZGlmaWNhdGlvbnMgb24gdGhlIG1haW4g
dGhyZWFkLCBvciByZWFkcyBvbiB0aGUgY29tcGlsZXIKKyAgICAvLyB0aHJlYWQuIFRoZSBjb21w
aWxlciB0aHJlYWQgaXMgbm90IGFsbG93ZWQgdG8gZG8gbW9kaWZpY2F0aW9ucy4KKyAgICBDb25j
dXJyZW50SklUTG9jayBtX2xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEluZmVycmVkVHlwZVRhYmxlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExODksNiArMTE4OSw4
IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAoc3RydWN0dXJl
LT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJy
ZWRUeXBlcygpKTsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVz
OwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52
YWxpZE9mZnNldCkgewpAQCAtMTIyNywyOSArMTIyOSw0MCBAQCBpbmxpbmUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAg
c2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwotICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUoCisgICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQp
OworICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT53aWxsU3Rv
cmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAg
CiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAh
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3QnV0dGVyZmx5
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBuZXdT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXdT
dHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZhbGlkYXRlT2Zm
c2V0KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBu
ZXdCdXR0ZXJmbHkpOworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVj
dHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVl
KTsKICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmli
dXRlcyk7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlw
ZSk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9k
ZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3Bl
cnR5KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7Cisg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAgICAg
ICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJv
cGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgfQorCiAgICAgICAgIHNsb3Quc2V0RXhpc3Rp
bmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwg
dmFsdWUpOwogCkBAIC0xMjY4LDE2ICsxMjgxLDE5IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbnRlcm5hbCgKICAgICAvLyB3ZSB3YW50LgogICAgIERlZmVycmVkU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7CiAgICAgCi0g
ICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAm
ZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb24oCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2lu
dEZpcmUpOworICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAor
ICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJv
cGVydHlTbG90OjpQdXRCeUlkKTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgc2V0U3Ry
dWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKKyAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIHNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0cnVjdHVyZSk7
CiAKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIHNsb3Quc2V0TmV3UHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAg
ICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAg
IG5ld1N0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTMzNSw4ICsxMzUxLDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0
OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVT
dG9yYWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZt
LCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3Rl
ZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
cy0+c3RydWN0dXJlKCk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5h
ZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OworICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICBzdHJ1Y3R1cmUtPndpbGxT
dG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0
aW1pemUpOworICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUwLDExICszNTAsMTUgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVy
aWFsaXplUHJvcGVydHlNYXAoVgogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNl
dCh2bSwgdGhpcywgdGFibGUpOwogCisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVUYWJsZSA9
IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisKICAgICBmb3IgKHNpemVfdCBpID0gc3RydWN0
dXJlcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsK
ICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFt
ZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmli
dXRlc0luUHJldmlvdXMoKSk7CisgICAgICAgIGlmICh0eXBlVGFibGUgJiYgdHlwZVRhYmxlLT5n
ZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpKSkKKyAgICAgICAgICAgIGVudHJ5
Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVu
dHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdl
KTsKICAgICB9CiAgICAgCkBAIC00NjQsNiArNDY4LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZp
b3VzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0s
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
dm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Cisg
ICAgdHJhbnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwodm0sIHRyYW5z
aXRpb24sIHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAKICAgICBvZmZz
ZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAKQEAg
LTQ3OSw2ICs0ODQsMjQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dAogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5T2Zmc2V0JiBvZmZzZXQpCiB7CisgICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUgZ29vZCBy
ZWFzb25zIHdoeSB0aGlzIGdvZXMgZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeSBy
YXRoZXIgdGhhbgorICAgIC8vIGNhY2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXggYWxsIG9m
IHRoZXNlIHRoaW5ncywgYnV0IHdlIG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdlIGV2ZXIg
dHJ5CisgICAgLy8gdG8gb3B0aW1pemUgdGhpcyBjYXNlLgorICAgIC8vCisgICAgLy8gLSBDYWNo
ZWQgdHJhbnNpdGlvbnMgdXN1YWxseSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFuZCBhc3N1
bWUgdGhhdCB0aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgdGhleQorICAgIC8vICAgY2FuIGp1c3Qg
cmVidWlsZCB0aGUgdGFibGUgYnkgbG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBUaGF0IGNv
ZGUgYXNzdW1lcyB0aGF0IHRoZSB0YWJsZSBvbmx5CisgICAgLy8gICBncmV3IGFuZCBuZXZlciBz
aHJhbmsuIFRvIHN1cHBvcnQgcmVtb3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIHByb3Bl
cnR5IHRhYmxlIG1hdGVyaWFsaXphdGlvbgorICAgIC8vICAgY29kZSB0byBoYW5kbGUgZGVsZXRp
b25zLiBBbHNvLCB3ZSBoYXZlIGxvZ2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG9u
IGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUgYnkganVz
dCBsb29raW5nIGJhY2sgdGhyb3VnaCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNlIHRoZSBs
YXN0CisgICAgLy8gICBzdHJ1Y3R1cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9n
aWMgd291bGQgYWxzbyBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAorICAgIC8v
ICAgcmVtb3ZhbHMuCisgICAgLy8KKyAgICAvLyAtIEluZmVycmVkVHlwZVRhYmxlIGFzc3VtZXMg
dGhhdCByZW1vdmFsIGhhcyBuZXZlciBoYXBwZW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2Ug
aWYgd2UgY291bGQKKyAgICAvLyAgIHJlbW92ZSBhIHByb3BlcnR5IGFuZCB0aGVuIHJlLWFkZCBp
dCBsYXRlciwgdGhlbiB0aGUgImFic2VuY2UgbWVhbnMgdG9wIiBvcHRpbWl6YXRpb24gd291bGRu
J3QKKyAgICAvLyAgIHdvcmsgYW55bW9yZSwgdW5sZXNzIHJlbW92YWwgYWxzbyBlaXRoZXIgcG9p
c29uZWQgdHlwZSBpbmZlcmVuY2UgKGJ5IGRvaW5nIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvCisg
ICAgLy8gICBoYXNCZWVuRGljdGlvbmFyeSkgb3IgYnkgc3Ryb25nbHkgbWFya2luZyB0aGUgZW50
cnkgYXMgVG9wIGJ5IGVuc3VyaW5nIHRoYXQgaXQgaXMgbm90IGFic2VudCwgYnV0CisgICAgLy8g
ICBpbnN0ZWFkLCBoYXMgYSBudWxsIGVudHJ5LgorICAgIAogICAgIEFTU0VSVCghc3RydWN0dXJl
LT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKQEAg
LTg0MSw2ICs4NjQsNDMgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFBy
bwogICAgIHNldERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKHRydWUpOwogfQogCit2b2lkIFN0
cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAorICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSwKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIEFTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IGluZm8oKSk7CisgICAgQVNTRVJUKCFoYXNCZWVuRGljdGlvbmFyeSgpKTsKKworICAgIC8v
IENyZWF0ZSB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxz
ZSwgc28gdGhhdCB3ZSBkb24ndCBHQyBhZnRlciB3ZSBoYXZlIGFscmVhZHkKKyAgICAvLyBncmFi
YmVkIGEgcG9pbnRlciBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuCisgICAgSW5mZXJyZWRUeXBlVGFi
bGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKyAgICBpZiAoIXRhYmxlKSB7
CisgICAgICAgIHRhYmxlID0gSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZSh2bSk7CisgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1faW5mZXJyZWRUeXBlVGFibGUuc2V0
KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdl
J3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgorICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFi
bGU7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRh
YmxlKTsKKworICAgIC8vIFdlIG11c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVh
dGVkIHRoZSBnaXZlbiBwcm9wZXJ0eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMgcHJlc2VudAor
ICAgIC8vIGFscmVhZHksIHNvIHdlIG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxlIG5vdy4KKyAg
ICBBU1NFUlQocHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyAuLi4gYW5kIHRoZSBwcm9wZXJ0eSBt
dXN0IGJlIHByZXNlbnQuCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRh
YmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBBU1NFUlQoZW50cnkpOworCisgICAg
aWYgKHNob3VsZE9wdGltaXplKQorICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gdGFi
bGUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2UpOworICAgIGVs
c2UgeworICAgICAgICB0YWJsZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lLCBhZ2UpOworICAg
ICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gZmFsc2U7CisgICAgfQorfQorCiAjaWYgRFVN
UF9QUk9QRVJUWU1BUF9TVEFUUwogCiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBwcm9wZXJ0
eU1hcEhhc2hUYWJsZVN0YXRzID0gMDsKQEAgLTEwNTgsNiArMTExOCw4IEBAIHZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CiAgICAgfSBlbHNlIGlmICh0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVy
dHlUYWJsZVVuc2FmZS5jbGVhcigpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1faW5mZXJyZWRUeXBlVGFibGUpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hh
aW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgog
I2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgi
CisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC04MSwxMSArODIs
MTMgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBr
ZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmlidXRlczsK
KyAgICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBvciBub3Qg
YSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0YWJs
ZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGlyZWN0SW50
ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtleShudWxscHRy
KQogICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMo
MCkKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAK
QEAgLTkzLDYgKzk2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgICAgICA6IGtl
eShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0
dHJpYnV0ZXMpCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpAQCAtMzIz
LDYgKzMyNyw3IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3Bl
cnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcyk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsKIAogICAg
IC8vIFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwgY2FsbCB5
b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1cmUn
cyBsb2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBoZWxkIG9y
IG5vdCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNDgxLDYgKzQ4Niw0MCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vz
c2FyeSh2bSk7CiAgICAgfQogCisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhIW1faW5mZXJyZWRUeXBlVGFibGU7CisgICAgfQorCisgICAg
SW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAg
ICB7CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlw
ZVRhYmxlLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlLT5nZXQodWlkKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IGluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IGluZmVycmVkVHlwZUZvcih1aWQp
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZGVzY3JpcHRvcigpOworICAgICAgICByZXR1
cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHdp
bGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQorICAgIHsK
KyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRpbWl6ZSAmJiAh
bV9pbmZlcnJlZFR5cGVUYWJsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdpbGxT
dG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIElu
ZmVycmVkVHlwZVRhYmxlOjpOZXdQcm9wZXJ0eSk7CisgICAgfQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB3aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgIFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKKyAg
ICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNo
b3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6T2xkUHJvcGVydHkpOworICAgIH0KKwog
ICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSk7
CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgbWF0Y2ggZW5v
dWdoIHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMKQEAgLTYzMiw2
ICs2NzEsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRXYXRjaGluZ0ludGVybmFs
UHJvcGVydGllcyhWTSYpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3aWxsU3RvcmVW
YWx1ZVNsb3coCisgICAgICAgIFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sLCBJbmZl
cnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOworCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4
VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCkBAIC02NTUsNiArNjk3
LDggQEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9wZXJ0
eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFk
LgogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7
CiAKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFibGU+IG1faW5mZXJyZWRUeXBlVGFi
bGU7CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hw
b2ludFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2
LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NSwxOSArNzUsMTkgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpzdG9yZWRQcm90bwogCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8o
KSA9PSBpbmZvKCkpOwotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKLSAgICBp
ZiAoIXByb3BlcnR5VGFibGUpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAg
UHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1l
LnVpZCgpKTsKLSAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxpZE9mZnNl
dDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOwor
ICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRU
eXBlKTsKIH0KICAgICAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRl
cykKIHsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKQor
ewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0
dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKQEAgLTEwMSw2ICsxMDEsNyBAQCBBTFdB
WVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgICAgIHJldHVybiBpbnZh
bGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOworICAgIGhh
c0luZmVycmVkVHlwZSA9IGVudHJ5LT5oYXNJbmZlcnJlZFR5cGU7CiAgICAgcmV0dXJuIGVudHJ5
LT5vZmZzZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJu
VmFsdWUuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxT
d2VlcGVyLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0FQSVZhbHVlV3Jh
cHBlci5oIgpAQCAtMjQxLDYgKzI0Miw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVy
dHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHdlYWtN
YXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhp
cywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwor
ICAgIGluZmVycmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGluZmVycmVkVHlwZVRhYmxlU3Ry
dWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLnNldCgqdGhp
cywgRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIGV4Y2VwdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIEV4Y2VwdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb21pc2VEZWZlcnJlZFN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMiw2ICszMDIsOCBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
cHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWFrTWFwRGF0
YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVlU3RydWN0dXJl
OworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IGV4Y2VwdGlvblN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJy
ZWRTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3JUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlQWRkUmVzdWx0IHsKKyAgICAgICAgSGFzaFRhYmxlQWRk
UmVzdWx0KCkgOiBpc05ld0VudHJ5KGZhbHNlKSB7IH0KICAgICAgICAgSGFzaFRhYmxlQWRkUmVz
dWx0KEl0ZXJhdG9yVHlwZSBpdGVyLCBib29sIGlzTmV3RW50cnkpIDogaXRlcmF0b3IoaXRlciks
IGlzTmV3RW50cnkoaXNOZXdFbnRyeSkgeyB9CiAgICAgICAgIEl0ZXJhdG9yVHlwZSBpdGVyYXRv
cjsKICAgICAgICAgYm9vbCBpc05ld0VudHJ5Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261275</attachid>
            <date>2015-09-15 18:04:45 -0700</date>
            <delta_ts>2015-09-15 19:30:22 -0700</delta_ts>
            <desc>OMG it passed some tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>175202</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNB
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJB
OEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBG
RkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZF
ODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZC
MUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAw
NzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAv
KiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIg
LyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBC
QUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYw
IC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUy
MTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQv
TExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0
QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
ZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8s
CiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJ
CQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBA
IC00Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8q
IEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2
IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0
NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQx
LDYgKzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1
Mjk2LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyog
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBG
NTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRF
QzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAog
CQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8s
CiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0
NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJ
CQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4
NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZB
OTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1
NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0
OTcsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJ
CQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcx
REQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFC
ODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4Niw2ICs2ODYsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
YXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNj
cmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAg
CiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcwOSw2ICs3MTYs
MTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBS
RUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CiAK
KyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJl
ZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJc
biIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2
ZSB0eXBlLlxuIik7CisgICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQdXRC
eUlkRmxhZ3MuaCIKIAorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTM1LDE2ICszNiwxNCBAQCBuYW1lc3BhY2UgV1RG
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsKLSAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJp
bmdPdXQ7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCJ8Iik7CiAgICAgaWYgKGZsYWdzICYgUHV0
QnlJZElzRGlyZWN0KQotICAgICAgICBzdHJpbmdPdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIpOwogCi0gICAgQ1N0cmluZyBz
dHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7Ci0gICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkp
Ci0gICAgICAgIG91dC5wcmludCgiTm9uZSIpOwotICAgIGVsc2UKLSAgICAgICAgb3V0LnByaW50
KHN0cmluZyk7CisgICAgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQgPSBJbmZlcnJlZFR5cGU6Omtp
bmRGb3JGbGFncyhmbGFncyk7CisgICAgb3V0LnByaW50KGNvbW1hLCBraW5kKTsKKyAgICBpZiAo
SW5mZXJyZWRUeXBlOjpoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgIG91dC5wcmludCgiOiIs
IGJpdHdpc2VfY2FzdDxpbnQzMl90PihkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZEZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRGbGFncy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
Niw3MCBAQAogI2lmbmRlZiBQdXRCeUlkRmxhZ3NfaAogI2RlZmluZSBQdXRCeUlkRmxhZ3NfaAog
CisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAotZW51
bSBQdXRCeUlkRmxhZ3MgeworZW51bSBQdXRCeUlkRmxhZ3MgOiBpbnRwdHJfdCB7CiAgICAgUHV0
QnlJZE5vbmUgPSAwLAotICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDEKKworICAgIC8vIFRoaXMgZmxh
ZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHV0X2J5X2lkIGlzIGRpcmVjdC4gVGhhdCBtZWFucyB0aGF0
IHdlIHN0b3JlIHRoZSBwcm9wZXJ0eSB3aXRob3V0CisgICAgLy8gY2hlY2tpbmcgaWYgdGhlIHBy
b3RvdHlwZSBjaGFpbiBoYXMgYSBzZXR0ZXIuCisgICAgUHV0QnlJZElzRGlyZWN0ID0gMHgxLAor
ICAgIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrID0gMHgxLAorCisgICAgLy8gTk9URTogVGhl
IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGluIExvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtLgorCisgICAgLy8gRGV0ZXJtaW5pbmcgdGhlIHJlcXVpcmVkIGluZmVycmVk
IHR5cGUgaW52b2x2ZXMgZmlyc3QgY2hlY2tpbmcgdGhlIHByaW1hcnkgdHlwZSBtYXNrLCBhbmQg
dGhlbgorICAgIC8vIHVzaW5nIHRoYXQgdG8gZmlndXJlIG91dCB0aGUgbWVhbmluZyBvZiB0aGUg
c2Vjb25kYXJ5IG1hc2s6CisgICAgLy8gc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlw
ZU1hc2spIHsKKyAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAv
LyAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgIC8v
ICAgICAuLi4KKyAgICAvLyAgICAgfQorICAgIC8vICAgICBicmVhazsKKyAgICAvLyBjYXNlIFB1
dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgLy8gY2FzZSBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAvLyAgICAgU3RydWN0
dXJlSUQgc3RydWN0dXJlSUQgPSBkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncyk7CisgICAgLy8gICAg
IGJyZWFrOworICAgIC8vIH0KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gMHg2LAorICAg
IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MCwgLy8gTmVlZCB0byBjaGVjayB0aGUg
c2Vjb25kYXJ5IHR5cGUgbWFzayBmb3IgdGhlIHR5cGUuCisgICAgUHV0QnlJZFByaW1hcnlUeXBl
T2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MiwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVy
ZSBJRC4KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9
IDB4NCwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVyZSBJRC4KKworICAgIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlTWFzayA9IC0weDgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20g
PSAweDAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuID0gMHg4LAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50
MzIgPSAweDE4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyID0gMHgyMCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3QgPSAweDMwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9
IDB4MzgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCiB9OwogCitpbmxpbmUg
UHV0QnlJZEZsYWdzIGVuY29kZVN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEIGlkKQoreworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMyk7CisjZWxzZQorICAgIFB1dEJ5SWRGbGFncyBy
ZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCk7CisgICAgQVNTRVJUKCEocmVz
dWx0ICYgflB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZW5kaWYKK30KKworaW5saW5lIFN0cnVjdHVyZUlEIGRlY29kZVN0cnVjdHVyZUlEKFB1dEJ5SWRG
bGFncyBmbGFncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgPj4gMyk7CisjZWxzZQorICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8U3RydWN0dXJlSUQ+KGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKTsKKyNlbmRp
ZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7
CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVy
ZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwpAQCAtMTAzLDcgKzEwMyw4IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0
QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisg
ICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwgbmV3
U3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogfQogCiBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQpAQCAtMTYyLDcgKzE2Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICB9CkBAIC0xOTMsNyArMTk0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9
IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
MjA2LDcgKzIwOCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhT
dGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+aW5mZXJy
ZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTMyOSw4ICszMzIsMTAgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIFNvLCBi
ZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJ
ZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKSkKKworICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQgdmFyaWFudCA9CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRv
ckZvcih1aWQpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMzU2LDEzICszNjEsMTYgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAg
CiAgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVj
dHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwg
dWlkLCAwLCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0
LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihz
dHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHRyYW5z
aXRpb24tPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSkpOwogICAgICAgICBpZiAoIWRp
ZEFwcGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9
IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Cisg
ICAgbV9yZXF1aXJlZFR5cGUgPSBvdGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIu
bV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNl
CkBAIC01MiwxOCArNTMsMjEgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVy
YXRvcgogICAgIHJldHVybiAqdGhpczsKIH0KIAotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03MSw2ICs3
NSw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtODUsNiArOTAsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0
dGVyKAogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6
Om1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVy
cmVkVHlwZTo6VG9wOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzNCw5ICsxNDAsMTIg
QEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogewogICAgIGlmICht
X29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fcmVxdWlyZWRUeXBlICE9IG90aGVyLm1fcmVxdWlyZWRUeXBlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIFJlcGxhY2U6
CisgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAg
ICAgICAgIGNhc2UgUmVwbGFjZTogewogICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSk7CkBAIC0xNTgsNiArMTY3LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2UoY29ucwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAg
ICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CkBAIC0yMTAsMTQgKzIyMCwxNSBAQCB2b2lk
IFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIAogICAgIGNhc2Ug
UmVwbGFjZToKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBp
bkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLAor
ICAgICAgICAgICAgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFRy
YW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjog
IiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAg
ICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwK
LSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZz
ZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlv
blNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRU
eXBlKCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJs
aWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRC
eUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwog
ICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0g
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgc2V0dGVyKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9w
ZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtOTksNiAr
OTksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CiAgICAgfQog
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHJlcXVpcmVkVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFR5cGU7CisgICAgfQorCiAgICAgYm9vbCB3cml0
ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25z
dDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKQEAgLTEzMCw2ICsxMzUsNyBAQCBwcml2
YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CiAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fcmVxdWlyZWRUeXBlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
TW9kZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIK
ICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgiCkBAIC05OCwxMiArOTcsMTAgQEAgc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rp
b24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KICAgICBV
bmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsg
fQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3Bl
cmFuZDsgfQotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oUHV0QnlJZEZsYWdzIGZsYWdzKSB7IHUu
cHV0QnlJZEZsYWdzID0gZmxhZ3M7IH0KICAgICB1bmlvbiB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZTsKICAgICAgICAgaW50MzJfdCBvcGVyYW5kOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsK
LSAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFnczsKICAgICB9IHU7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsMzkgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgdG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKICAgICB9Ci0gICAgCisKKyAgICAv
LyBOb3RlIHRoYXQgZm9yIGFueSB3YXRjaHBvaW50IHRoYXQgaXMgdmlzaWJsZSBmcm9tIHRoZSBE
RkcsIGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byB3cml0ZSBjb2RlIGxpa2U6CisgICAgLy8KKyAg
ICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAg
IC8vCisgICAgLy8gQ29uY3VycmVudGx5IHRvIHRoaXMsIHRoZSBERkcgY291bGQgZG86CisgICAg
Ly8KKyAgICAvLyBpZiAody5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcGVyZm9ybSBvcHRp
bWl6YXRpb25zOworICAgIC8vIGlmICghdy5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcmV0
cnkgY29tcGlsYXRpb247CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgdGhlIERGRyBhbGdvcml0
aG0gaXMgd2lkZXNwcmVhZCwgYW5kIHNvdW5kLCBiZWNhdXNlIGZpcmVBbGwoKSBhbmQgaW52YWxp
ZGF0ZSgpIHdpbGwgbGVhdmUKKyAgICAvLyB0aGUgd2F0Y2hwb2ludCBpbiBhICFpc1N0aWxsVmFs
aWQoKSBzdGF0ZS4gSGVuY2UsIGlmIGZpcmVBbGwoKSBvciBpbnZhbGlkYXRlKCkgaW50ZXJsZWF2
ZWQgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCBpc1N0aWxsVmFsaWQoKSBjaGVjayBhbmQgdGhl
IHNlY29uZCBvbmUsIHRoZW4gaXQgd291bGQgc2ltcGx5IGNhdXNlIHRoZSBERkcgdG8gcmV0cnkK
KyAgICAvLyBjb21waWxhdGlvbiBsYXRlci4KKyAgICAvLworICAgIC8vIEJ1dCwgaWYgeW91IGNo
YW5nZSBzb21lIHBpZWNlIG9mIHN0YXRlIHRoYXQgdGhlIERGRyBtaWdodCBvcHRpbWl6ZSBmb3Is
IGJ1dCBpbnZhbGlkYXRlIHRoZQorICAgIC8vIHdhdGNocG9pbnQgYnkgZG9pbmc6CisgICAgLy8K
KyAgICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQor
ICAgIC8vCisgICAgLy8gdGhlbiB0aGUgREZHIHdvdWxkIG5ldmVyIGtub3cgdGhhdCB5b3UgaW52
YWxpZGF0ZWQgc3RhdGUgYmV0d2VlbiB0aGUgdHdvIGNoZWNrcy4KKyAgICAvLworICAgIC8vIFRo
ZXJlIGFyZSB0d28gd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlzOgorICAgIC8vCisgICAgLy8gLSBD
YWxsIGZpcmVBbGwoKSB3aXRob3V0IGEgaXNCZWluZ1dhdGNoZWQoKSBjaGVjay4gVGhlbiwgdGhl
IERGRyB3aWxsIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBoYXMKKyAgICAvLyAgIGJlZW4gaW52
YWxpZGF0ZWQgd2hlbiBpdCBkb2VzIGl0cyBzZWNvbmQgY2hlY2suCisgICAgLy8KKyAgICAvLyAt
IERvIG5vdCBleHBvc2UgdGhlIHdhdGNocG9pbnQgc2V0IHRvIHRoZSBERkcgZGlyZWN0bHksIGFu
ZCBoYXZlIHlvdXIgb3duIHdheSBvZiB2YWxpZGF0aW5nIHdoZXRoZXIKKyAgICAvLyAgIHRoZSBh
c3N1bXB0aW9ucyB0aGF0IHRoZSBERkcgdGhyZWFkIHVzZWQgYXJlIHN0aWxsIHZhbGlkIHdoZW4g
dGhlIERGRyBjb2RlIGlzIGluc3RhbGxlZC4KICAgICBib29sIGlzQmVpbmdXYXRjaGVkKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChpc0ZhdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEyLDcgKzIxMTIsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8v
IG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVy
ZSBjaGFpbgotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChQdXRCeUlkTm9uZSk7IC8vIGlzIG5v
dCBkaXJlY3QKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PihQdXRC
eUlkTm9uZSkpOyAvLyBpcyBub3QgZGlyZWN0CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0y
MTM0LDcgKzIxMzQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVj
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7IC8vIHN0cnVjdHVyZSBjaGFpbiAodW51c2VkIGlmIGRpcmVjdCkKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0
aWNfY2FzdDxpbnQ+KChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJv
cGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJ
c0RpcmVjdCA6IFB1dEJ5SWROb25lKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3Bl
Y05vbmUpCiAgICAgewotICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCk7
CisgICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0LCBhZG1pdHRlZFR5cGVz
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSw3ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSks
IHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJh
Y3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJy
YXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgyOSwxMCArMTgyOSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1
cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSkpIHsKLSAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9n
cmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOworICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
RmlndXJlIG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEg
Y29uc3RhbnQsIG9yIG1heWJlCiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3Vi
dGxlPwpAQCAtMTg0MSwyMiArMTg0MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2
ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QK
ICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVz
W2ldLm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
IHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJl
c3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE4ODAsNyAr
MTg3MCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFk
eSBlbnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1
Y3R1cmVTZXQoKTsKICAgICAgICAgCkBAIC0xODg4LDEyICsxODc3LDIzIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0
aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1
Y3R1cmUgY2hlY2sKICAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24n
dC4KICAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
ICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVj
T3RoZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAg
CisgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0LCBhZG1pdHRlZFR5cGVzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKQEAgLTIwODQsMTMgKzIwODQsMjkgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zm
c2V0OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkoZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIGRhdGEub2Zmc2V0KTsKLSAgICAg
ICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGgu
ZnJlZXplKHJlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1i
ZXJdOworCisgICAgICAgIC8vIEZJWE1FOiBUaGUgcGFydCBvZiB0aGlzIHRoYXQgaGFuZGxlcyBp
bmZlcnJlZCBwcm9wZXJ0eSB0eXBlcyByZWxpZXMgb24gQUkga25vd2luZyB0aGUgc3RydWN0dXJl
CisgICAgICAgIC8vIHJpZ2h0IG5vdy4gVGhhdCdzIHByb2JhYmx5IG5vdCBvcHRpbWFsLiBJbiBz
b21lIGNhc2VzLCB3ZSBtYXkgcGVyZm9ybSBhbiBvcHRpbWl6YXRpb24gKHVzdWFsbHkKKyAgICAg
ICAgLy8gYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gQUksIG1heWJlIGJ5IENTRSBmb3IgZXhhbXBs
ZSkgdGhhdCBvYnNjdXJlcyBBSSdzIHZpZXcgb2YgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyBh
dCB0aGUgcG9pbnQgd2hlcmUgR2V0QnlPZmZzZXQgcnVucy4gQ3VycmVudGx5LCB3aGVuIHRoYXQg
aGFwcGVucywgd2UnbGwgaGF2ZSB0byByZWx5IGVudGlyZWx5CisgICAgICAgIC8vIG9uIHRoZSB0
eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIgd2FzIGFibGUgdG8gcHJvdmUuCisgICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWUgPSBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRo
YXQgdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgor
ICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGVGcm9tUGFyc2luZzsKKyAgICAgICAgdHlwZUZyb21Q
YXJzaW5nLnNldChtX2dyYXBoLCBkYXRhLmluZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOwor
CisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2
YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2JhYmx5CisgICAgICAgIC8v
IGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgorICAgICAg
ICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZh
bHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1
ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAsNiArMjEzNiw4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVz
ZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9u
bHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcl07CisKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0
cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTIx
MjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6
Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRDYXNlLm1ldGhv
ZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3Rh
bnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAg
ICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisg
ICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0
aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAg
bV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAot
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpMb2FkOiB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNldCwgdWlkLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1f
Z3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCkBAIC0yMTYzLDYgKzIxOTIsOCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVl
IGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBv
cmlnaW5hbFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEFic3RyYWN0
VmFsdWUgcmVzdWx0aW5nVmFsdWU7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewog
ICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwpAQCAtMjE3MCw2ICsyMjAxLDExIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIHRoaXNTZXQu
ZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1
ZSA9IG9yaWdpbmFsVmFsdWU7CisgICAgICAgICAgICB0aGlzVmFsdWUuZmlsdGVyKG1fZ3JhcGgs
IHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOworICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVy
Z2UodGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHRoaXNTZXQub25seVN0cnVjdHVyZSgpICE9IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMjE4NSw2ICsyMjIxLDkg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNl
cnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9
PSBDb250cmFkaWN0aW9uKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsK
KyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAg
ICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBt
X3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtMjI2NCwxMyArMjMwMywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0
OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9z
dHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1
Y3R1cmUuc2V0KCksCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRC
eUlkRGlyZWN0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2lt
cGxlKCkpIHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAg
ICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBA
QCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7
Ci0gICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAg
ICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJh
dGlvbk9LKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNW
YWxpZChmYWxzZSk7CiAgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRU
eXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0
cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShT
cGVjQm9vbGVhbik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3Ro
ZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgc2V0VHlwZShTcGVjSW50MzIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0
VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgbWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNP
YmplY3QpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9y
T3RoZXI6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBo
JiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3Jp
cHRvcik7CisgICAgaWYgKGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZp
eFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRh
dGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3Vs
dERvdWJsZSkgewpAQCAtMTg5LDggKzIzOSwyMiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdl
T1NSRW50cnlWYWx1ZShHCiAgICAgcmV0dXJuIG9sZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCitib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlKSBjb25zdAogewor
ICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOworICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGlu
ZmVycmVkVHlwZSk7CisKKyAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7Cisg
ICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVlKTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1
ZSA9PSB0eXBlVmFsdWU7Cit9CisKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3Vs
YXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKK3sKKyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYg
U3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAoaXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmls
dHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcgKzI2Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJz
dHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAvLyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9k
ZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgIAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJv
bVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlwZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVy
LmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhl
cik7CiAgICAgCkBAIC0zMTUsNiArMzc5LDEzIEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyKGMKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0
ZXJWYWx1ZTsKKyAgICBmaWx0ZXJWYWx1ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJl
dHVybiBmaWx0ZXIoZmlsdGVyVmFsdWUpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRl
clZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJl
IHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3Mu
aCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5j
bHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJE
dW1wQ29udGV4dC5oIgpAQCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYpOworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlw
ZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2Rl
KiA9IG51bGxwdHIpOwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwg
Tm9kZSopOwogICAgIApAQCAtMjgwLDE3ICsyODQsMjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgIHsKICAgICAgICAgcmV0dXJuICEobV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9
CisKKyAgICBib29sIGlzVHlwZShHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYpIGNvbnN0OworCisgICAgLy8gRmlsdGVycyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0
cnVjdHVyZSBzZXQuIElmIHRoZSBhZG1pdHRlZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQs
IHRoaXMKKyAgICAvLyBpbXBsaWNpdGx5IGZpbHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkg
dGhlIHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFyZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8g
U3BlY0NlbGwuIEhlbmNlLCBhZnRlciB0aGlzIGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdl
ciBoYXZlIGFueSBub24tY2VsbCBtZW1iZXJzLiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRt
aXR0ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21lIG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQn
cyB3cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2Vs
bC4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNl
dCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAg
RmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1
bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRp
b25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25S
ZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAg
ICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBjaGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKICAgICAKICAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0
OwotICAgIAorCiAgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDYsOSArMjA2LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlD
b25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlw
ZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0
aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxl
UHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVk
VHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9m
ZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5j
ZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQg
c3RydWN0dXJlIHNldC4gRG9lcyBub3QKICAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhl
IGNvbmRpdGlvbiwgYnV0IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJz
IGEgY29udHJhZGljdGlvbi4KQEAgLTIzMDcsNyArMjMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAg
Tm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpA
QCAtMjMxOCwxMyArMjMxOSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlP
ZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlk
ZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlw
ZSA9IGluZmVycmVkVHlwZTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3Jh
cGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2Us
IGJhc2UpOwogCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeU9mZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYg
aW5mZXJyZWRUeXBlLAorICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3Rv
cmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzUsNiArMjMzOSw3
IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdl
QWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAg
ICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXI7CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAog
ICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwg
cHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ5LDcgKzI0NTQsOCBA
QCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUg
PSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAg
ICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVu
dGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZp
ZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9
CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZl
ciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTU1LDEzICsyNTYxLDEzIEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNr
ID0gdHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChKU09iamVjdCoga25v
d25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKICAgICAg
ICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0
IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYg
dGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9t
IGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAg
ICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjI2LDkgKzI2MzIsMTYg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAg
ICAgfQorCisgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7Cisg
ICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKQorICAgICAgICAgICAgICAg
IGluZmVycmVkVHlwZS5tZXJnZShtX2dyYXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVj
dHVyZSwgdWlkKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0g
SW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRs
ZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJl
ZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJy
ZWRUeXBlLCBsb2FkT3ApOwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2
MzksNyArMjY1Miw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAK
ICAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVw
bGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJz
KClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwot
ICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9m
ZnNldCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50
aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCksIHZhbHVlKTsK
IH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTI4NTQsNiArMjg2
Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIFN0b3Jh
Z2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwog
ICAgICAgICBkYXRhLT5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOwogICAgICAgICBkYXRhLT5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgZGF0YS0+aW5mZXJy
ZWRUeXBlID0gdmFyaWFudC5yZXF1aXJlZFR5cGUoKTsKICAgICAgICAgCiAgICAgICAgIGFkZFRv
R3JhcGgoCiAgICAgICAgICAgICBQdXRCeU9mZnNldCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1
ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTM3Myw3ICszNzQsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJl
KCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnJlcXVpcmVk
VHlwZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ4LDYgKzQ1MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBi
YXNlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpOworICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWVWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CiAK
ICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8g
UHVzaCBDRkEgb3ZlciB0aGlzIG5vZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAg
ICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUg
ZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCkBAIC00NjMsNyAr
NDY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
IXN0YXR1cy5pc1NpbXBsZSgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKKwogICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubnVtVmFyaWFudHMoKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50
cygpID4gMSAmJiAhaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCkBAIC02NjYsNiArNjY5LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAg
ICAgICAgCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1
ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNo
ZWNrKAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3JpZ2luLCBu
b2RlLT5jaGlsZDMoKS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogCiAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgY2hpbGRF
ZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNkZWZp
bmUgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERGRydz
IGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3ZSB3
YW50IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0IHRo
aXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFzcyBE
ZXNpcmVkSW5mZXJyZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKCkK
KyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVz
aXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAg
ICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgRGVzaXJlZElu
ZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9v
YmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2V4cGVjdGVkKEluZmVycmVkVHlwZTo6VG9wKQor
ICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9vYmplY3QgJiYgbV9leHBlY3RlZDsgfQorCisgICAgSW5mZXJyZWRUeXBlKiBvYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciBleHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWQ7IH0KKworICAgIGJvb2wgaXNT
dGlsbFZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuV2F0
Y2gobV9leHBlY3RlZCk7CisgICAgfQorCisgICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fb2JqZWN0LT5hZGRXYXRjaHBvaW50KHdhdGNo
cG9pbnQpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBv
dGhlci5tX29iamVjdAorICAgICAgICAgICAgJiYgbV9leHBlY3RlZCA9PSBvdGhlci5tX2V4cGVj
dGVkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNpcmVkSW5mZXJyZWRU
eXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9leHBlY3RlZCA9PSBJbmZlcnJlZFR5
cGU6OlRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBlKj46Omhhc2gobV9vYmplY3QpICsg
bV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwgY29udGV4dCksICIgZm9yICIsIFJh
d1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKiBtX29iamVjdDsKKyAgICBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKK307CisKK3N0cnVjdCBEZXNpcmVkSW5m
ZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRGVzaXJlZElu
ZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwgY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkRl
c2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpEZXNpcmVkSW5mZXJy
ZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5m
ZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVy
cmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTEgQEAgdm9p
ZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOgogICAgIH0KIH0KIAordm9pZCBJ
bmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIGtleS5hZGQo
Y29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwogRGVzaXJlZFdhdGNocG9p
bnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRlc2ly
ZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRk
TGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29u
c3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQoreworICAgIG1faW5mZXJyZWRUeXBlcy5hZGRM
YXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgp
KQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQo
Q29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRh
dGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7
CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9u
RGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRh
dGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0
CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFs
aWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYm
IG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVmZmVyVmll
d3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFy
ZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3Rp
bGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7CiB9
CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApAQCAtMTI3LDYgKzEzOSw3IEBAIHZvaWQg
RGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFAKICAgICBvdXQucHJpbnQoIiAgICBJ
bmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0KSwg
IlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQobV9i
dWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIE9iamVjdCBw
cm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMs
IGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB0eXBlczogIiwg
aW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJE
RkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIgogI2lu
Y2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgog
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCkBAIC05MSw2ICs5MiwxOCBAQCBz
dHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvCiAgICAgfQogfTsKIAorc3Ry
dWN0IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sq
LCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyBi
b29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisg
ICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsKKyAgICB9CisgICAgc3Rh
dGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBEZXNpcmVkSW5m
ZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJB
ZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2lu
dHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1OSw2ICsxNzIsMTAgQEAgcHVibGljOgog
ICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5
LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKICAgICAvLyB0aGUgcmVx
dWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgogICAgIHZv
aWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisKKyAgICAvLyBJ
dCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdy
YXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9lcworICAgIC8vIHRoZSByZXF1aXJlZCBH
QyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJik7
CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKQEAgLTE4Niw2ICsy
MDMsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1
cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBE
ZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbmZlcnJl
ZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICBHZW5lcmljRGVz
aXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9p
bmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZm
ZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7
CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwg
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxEZXNpcmVkSW5mZXJyZWRUeXBlLCBJ
bmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlwZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgog
I2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCIKQEAgLTEwOTIsNiArMTA5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBpbnNlcnRJbmZlcnJl
ZFR5cGVDaGVjaygKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbV9pbmRleEluQmxv
Y2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpLAorICAgICAgICAgICAgICAg
IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAgIHNw
ZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYxLDEyICsyNjEsMTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFj
Y2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRl
bnRpZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAg
ICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0KSk7CisgICAgICAgIG91dC5wcmludCgiLCBpbmZlcnJlZFR5cGUgPSAiLCBp
bkNvbnRleHQoc3RvcmFnZUFjY2Vzc0RhdGEuaW5mZXJyZWRUeXBlLCBjb250ZXh0KSk7CiAgICAg
fQogICAgIGlmIChub2RlLT5oYXNNdWx0aUdldEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11
bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7
IiwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRleHQp
KTsKKyAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzW2ldLm1ldGhvZCgpLmtpbmQoKSA9PSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoaW5mZXJy
ZWQgdmFsdWUgPSAiLCBpbkNvbnRleHQoaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGRhdGEuY2Fz
ZXNbaV0uc2V0KCksIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSksIGNvbnRl
eHQpLCAiKSIpOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNNdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKQEAgLTg4Nyw2ICs4OTEsMzkgQEAgYm9vbCBHcmFw
aDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQu
Y29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtl
eSYga2V5KQoreworICAgIGFzc2VydElzUmVnaXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOworICAg
IAorICAgIGF1dG8gaXRlciA9IG1faW5mZXJyZWRUeXBlcy5maW5kKGtleSk7CisgICAgaWYgKGl0
ZXIgIT0gbV9pbmZlcnJlZFR5cGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7
CisKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGVPYmplY3QgPSBrZXkuc3RydWN0dXJlKCktPmluZmVy
cmVkVHlwZUZvcihrZXkudWlkKCkpOworICAgIGlmICghdHlwZU9iamVjdCkgeworICAgICAgICBt
X2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1
cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yIHR5cGVEZXNjcmlwdG9yID0gdHlwZU9iamVjdC0+ZGVzY3JpcHRvcigpOworICAgIGlmICh0
eXBlRGVzY3JpcHRvci5raW5kKCkgPT0gSW5mZXJyZWRUeXBlOjpUb3ApIHsKKyAgICAgICAgbV9p
bmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJu
IEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKyAgICAKKyAgICBtX2luZmVycmVkVHlwZXMuYWRk
KGtleSwgdHlwZURlc2NyaXB0b3IpOworCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExh
emlseSh0eXBlT2JqZWN0KTsKKyAgICBpZiAodHlwZURlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisg
ICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHR5cGVEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKwor
ICAgIC8vIE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0aGlzIGRlc2lyZWQg
aW5mZXJyZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1heQorICAgIC8vIHBv
aW50IHRvIHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KKyAgICBtX3BsYW4ud2F0Y2hw
b2ludHMuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlwZURlc2Ny
aXB0b3IpKTsKKworICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKK30KKwogRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVz
cz4+OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsK
QEAgLTEwNjEsNyArMTA5OCw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVy
dHkoSlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1
ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJl
LmlzQ2xvYmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAg
ICAgICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwg
d2UgY291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcg
dG8gY29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTExMywzNyBAQCBK
U1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdl
dENvbnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQp
OwogfQogCitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVz
dWx0OworICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVl
LnNldCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIGlmIChjbG9i
YmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgcmVzdWx0LmNsb2Ji
ZXJTdHJ1Y3R1cmVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJhY3RWYWx1ZSBH
cmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3RyYWN0VmFsdWUm
IGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAg
ICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIGlmIChKU1ZhbHVl
IHZhbHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQpKSB7CisgICAgICAg
IEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0aGlzLCAqZnJlZXpl
KHZhbHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm4gaW5m
ZXJyZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCwgY2xvYmJl
clN0YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9wKCk7Cit9CisKIEpT
VmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVlIGJhc2UsIFNjb3Bl
T2Zmc2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21lIGNvbmN1cnJlbmN5
IHN0b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVDb2RlUGFyc2VyLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg5ODEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUg
IkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisjaW5jbHVkZSAi
REZHUHJvcGVydHlUeXBlS2V5LmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVk
ZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCkBAIC02NzUs
NiArNjc2LDIxIEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxv
YWRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4g
VGhpcyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2Ug
dHJhY2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2Jq
ZWN0KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICAvLyBUZWxscyB1cyB3aGF0IGluZmVy
cmVkIHR5cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3BlcnR5IHRvIGhhdmUgbm93IGFu
ZCBpbiB0aGUgZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5
cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yIGluZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVHlwZUZvcihQ
cm9wZXJ0eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICB9CisKKyAgICBBYnN0cmFjdFZh
bHVlIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0
JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSBT
dHJ1Y3R1cmVzQXJlV2F0Y2hlZCk7CisKKyAgICAvLyBUaGlzIHVzZXMgZWl0aGVyIGNvbnN0YW50
IHByb3BlcnR5IGluZmVyZW5jZSBvciBwcm9wZXJ0eSB0eXBlIGluZmVyZW5jZSB0byBkZXJpdmUg
YSBnb29kIGFic3RyYWN0CisgICAgLy8gdmFsdWUgZm9yIHNvbWUgcHJvcGVydHkgYWNjZXNzZWQg
d2l0aCB0aGUgZ2l2ZW4gYWJzdHJhY3QgdmFsdWUgYmFzZS4KKyAgICBBYnN0cmFjdFZhbHVlIGlu
ZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSk7CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENv
ZGVCbG9jayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVD
YWxsRnJhbWUqKTsKQEAgLTg1Niw2ICs4NzIsNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2Rl
TGl2ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVj
dCosIFByb3BlcnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOworICAgIEhhc2hNYXA8UHJvcGVydHlU
eXBlS2V5LCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKICAgICBE
b21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51
bWJlcmluZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRp
b25TZXQsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIGJhc2VO
b2RlLAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgRm9yY2VP
U1JFeGl0LCBvcmlnaW4pOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm9vbGVhbjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBT
cGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgQm9vbGVhblVzZSkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4s
IEVkZ2UoYmFzZU5vZGUsIE90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9k
ZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgSW50MzJVc2Up
KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ss
IG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgTnVtYmVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUs
IFN0cmluZ1VzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAor
ICAgICAgICAgICAgT3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0
eXBlLnN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2RlLCBDZWxsVXNlKSk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAg
ICAgICAgT3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBlLnN0
cnVjdHVyZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2RlLCBDZWxsT3JPdGhlclVzZSkp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywg
b3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBPYmplY3RVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFz
ZU5vZGUsIE9iamVjdE9yT3RoZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERGR19DUkFT
SChpbnNlcnRpb25TZXQuZ3JhcGgoKSwgYmFzZU5vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRU
eXBlQ2hlY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5mZXJyZWRUeXBlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkdJbmZl
cnJlZFR5cGVDaGVja19oCisjZGVmaW5lIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
SW5mZXJyZWRUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8g
SW5zZXJ0cyBhIHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5vZGUgaGFzIHRoZSBn
aXZlbiBpbmZlcnJlZCB0eXBlLgordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJ
bnNlcnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIE5vZGUqIGJhc2VO
b2RlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJ
bmZlcnJlZFR5cGVDaGVja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2s7CiBz
dHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBrbm93
IHRoZSBpbmZlcnJlZCB0eXBlLiBGb3IgcHV0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3
ZSBuZWVkIHRvIHJlbWVtYmVyCisgICAgLy8gd2hhdCBjaGVjayBpcyBuZWVkZWQuIEZvciBnZXRz
LCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSBBSSBtaWdodCBmb3JnZXQgd2hh
dCB0eXBlIGlzCisgICAgLy8gZ3VhcmFudGVlZC4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3IgaW5mZXJyZWRUeXBlOwogfTsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEzNSwxNCArMjEzNSwyMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1cmVzKSB7CiAgICAgICAg
ICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gY3VycmVudE9m
ZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvdXIgYW5hbHlzaXMg
dHJlYXRzIE11bHRpUHV0QnlPZmZzZXQgbGlrZSBhbiBlc2NhcGUsIHdlIG9ubHkgaGF2ZSB0bwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIHN0b3JpbmcgcmVzdWx0cyB0aGF0
IHdvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IHN0b3JlZCBieSBQdXRCeU9mZnNldAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRob3NlIG5vZGVzIHdlcmUgZ3VhcmRlZCBieSB0
aGUgYXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgY2FuIHNpbXBseSB0cnVzdCB0aGF0IHRo
ZSBpbmNvbWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5cGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgYXJlIHVzaW5nLgogICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShj
dXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudE9mZnNldCA9IG9mZnNldDsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTZXQuY2xlYXIoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgIGRh
dGEtPnZhcmlhbnRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBl
S2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wZXJ0eVR5cGVLZXlf
aAorI2RlZmluZSBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgb2JqZWN0IGlzIGEga2V5IGZv
ciBmaW5kaW5nIGEgcHJvcGVydHkncyB0eXBlLiBJdCdzIGEgdHVwbGUgb2YgU3RydWN0dXJlKiBh
bmQgVW5pcXVlZFN0cmluZ0ltcGwqLgorCitjbGFzcyBQcm9wZXJ0eVR5cGVLZXkgeworcHVibGlj
OgorICAgIFByb3BlcnR5VHlwZUtleSgpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikK
KyAgICAgICAgLCBtX3VpZChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5
cGVLZXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAg
ICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICB7
CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1fdWlkKGRl
bGV0ZWRVSUQoKSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlICYmIG1fdWlkOyB9CisKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQorICAgICAgICAgICAgJiYg
bV91aWQgPT0gb3RoZXIubV91aWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0
dXJlKSArIFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlkKTsKKyAg
ICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmUgJiYgbV91aWQgPT0gZGVsZXRlZFVJRCgpOworICAg
IH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcElu
Q29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwgbV91aWQpOworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcElu
Q29udGV4dChvdXQsIG51bGxwdHIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVW5p
cXVlZFN0cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIG1fdWlkOworfTsKKworc3RydWN0IFByb3BlcnR5VHlwZUtleUhhc2ggeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvcGVydHlUeXBlS2V5
JiBhLCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6
REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpE
Rkc6OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlBy
b3BlcnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlYWxOdW1i
ZXJVc2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgor
ICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZToKICAg
ICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToKQEAg
LTEyNyw2ICsxMjgsOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
CiAgICAgaWYgKCFzYWZlVG9FeGVjdXRlRWRnZS5yZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgLy8gTk9URTogVGhpcyB0ZW5kcyB0byBsaWUgd2hlbiBpdCBjb21lcyB0byBl
ZmZlY3RmdWwgbm9kZXMsIGJlY2F1c2UgaXQga25vd3MgdGhhdCB0aGV5IGFyZW4ndCBnb2luZyB0
bworICAgIC8vIGdldCBob2lzdGVkIGFueXdheS4KKwogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMyLDYgKzUyMzIsODAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZihOb2RlKgogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJl
KE5vZGUqIG5vZGUsIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBBU1NF
UlQobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKKyAgICAKKyAgICBpZiAobm9kZS0+c3Ry
dWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAg
ICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwg
MCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8R1BSVGVtcG9yYXJ5PiBzdHJ1Y3R1cmU7CisgICAgICAgIEdQUlJlZyBz
dHJ1Y3R1cmVHUFI7CisgICAgICAgIAorICAgICAgICBpZiAodGVtcEdQUiA9PSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEdQUlRlbXBv
cmFyeT4odGhpcyk7CisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUtPmdwcigp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHRlbXBHUFI7Cisg
ICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2VsbEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAg
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyAr
K2kpIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKAorICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFdlYWtTdHJ1Y3R1cmUoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUt
PnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJl
KAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlR1BSLCBu
b2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNr
U3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVj
dHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENlbGxPck90aGVyVXNl
OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygp
OworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZVJlZ3MpOworICAgICAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVlUmVncywgbm9kZS0+Y2hpbGQxKCks
IFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhl
cih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIGNvbXBp
bGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1wR1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1f
aml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMt
PmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2MzYsNiArNTcxMCwyMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2UgCiAgICAgKFNwZWN1bGF0ZUNlbGxP
cGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
SlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNo
SWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisg
ICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFuZC5qc1ZhbHVlUmVncygpLCB0ZW1w
R1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRn
ZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYwMDYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBzcGVjdWxh
dGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgor
ICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMTUsNiArMjIxNSw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiwgR1BSUmVnIGNlbGxHUFIsIEdQ
UlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKik7CiAg
ICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhH
UFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRl
RG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CiAg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3Ro
ZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVj
dWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2Up
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTIsNyArMTkyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgCisKICAgICAvLyBJ
biBtb3N0IGNhc2VzLCB3aGF0IHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB2ZXJpZnkgd2hldGhl
ciB0aGUgc2V0IGlzIHRvcCBvciBjbG9iYmVyZWQsIGFuZAogICAgIC8vIGlmIG5vdCwgZW51bWVy
YXRlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMgb25seSBpbiBjYXNlcyB3aGVyZSB0
aGUgc2luZ2xldG9uIGNhc2UgaXMKICAgICAvLyBtZWFuaW5nZnVsbHkgc3BlY2lhbCwgbGlrZSBm
b3IgdHJhbnNpdGlvbnMuCkBAIC0yMDIsNiArMjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gbV9zZXQub25seVN0cnVjdHVyZSgpOwog
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlz
VG9wKCkpOworICAgICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KICAgICAKICAg
ICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3
OSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNl
IEtub3duQ2VsbFVzZToKICAgICAgICAgb3V0LnByaW50KCJLbm93bkNlbGwiKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiQ2Vs
bE9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAg
ICBvdXQucHJpbnQoIk9iamVjdCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkJvb2xlYW5Vc2UsCiAgICAgQ2VsbFVzZSwK
ICAgICBLbm93bkNlbGxVc2UsCisgICAgQ2VsbE9yT3RoZXJVc2UsCiAgICAgT2JqZWN0VXNlLAog
ICAgIEZ1bmN0aW9uVXNlLAogICAgIEZpbmFsT2JqZWN0VXNlLApAQCAtMTA4LDYgKzEwOSw4IEBA
IGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICBjYXNlIENlbGxV
c2U6CiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAg
ICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGwgfCBTcGVjT3Ro
ZXI7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVjT2JqZWN0OwogICAg
IGNhc2UgRnVuY3Rpb25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw2ICs0
MTgsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAg
ICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxs
VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAgICAg
IGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAg
ICAgICAgICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgICAgICAgICBjYXNlIE9i
amVjdE9yT3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjYs
MjEgKzIwMjYsNTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVj
dHVyZSgpCiAgICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKICAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBleGl0S2luZCA9
IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4aXRLaW5kID0g
QmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5s
b2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKLSAgICAg
ICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVl
KGNlbGwpLCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIFt0
aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vh
a1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKKworICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTog
eworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAg
ICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVl
VmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJl
U2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1
Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1
cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+
Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2Us
IG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVj
dHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9u
KTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9k
ZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7Cisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoKQpAQCAtNDAyMiw2
ICs0MDU3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tp
XSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEu
dmFyaWFudHNbaV07CisKKyAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9kZS0+Y2hp
bGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKQEAgLTU2NzQsNiArNTcxMSwxMzUgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOwogICAgIH0KKwor
ICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
Y2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0IGlzIGNh
bGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAgICAgICAvLworICAgICAgICAv
LyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8vCisgICAgICAgIC8vIG1heSBi
ZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgc3dpdGNoIChvYmplY3Qt
PnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoKKyAgICAgICAgLy8gICAgICAg
ICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAgICAgLy8gICAgICAgICAuLi4K
KyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgIGNhc2UgNDM6CisgICAg
ICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7CisgICAgICAgIC8v
ICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vICAgICB9
CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUgZGlmZmVy
ZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291bGQgYmUK
KyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0eXBlMSB8
IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5ib29sZWFuVHJ1ZSk7
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xl
YW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwg
ZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNO
b3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90TnVtYmVy
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFr
U3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI6IHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBt
X291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxD
YXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAgICAg
ICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3Ry
dWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1
Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29u
dGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAg
IGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKKworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE9iamVjdCh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUg
T2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RD
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0
T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RP
ck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RD
ZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJlZCB0
eXBlIik7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3Jh
Z2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAg
ICB7CkBAIC03NTE0LDYgKzc2ODAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENlbGxVc2U6
CiAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsT3JP
dGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtub3duQ2VsbFVz
ZToKICAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdl
KSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc1OTQsNiArNzc2MywyMiBAQCBwcml2YXRlOgog
ICAgICAgICBsb3dDZWxsKGVkZ2UpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUNl
bGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JP
dGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgY29udGludWF0aW9uIikp
OworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
LCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2VsbCkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RDZWxsLCBjb250aW51YXRp
b24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUludChF
ZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hl
Y2soZWRnZSkpCkBAIC04MTI3LDYgKzgzMTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhbkZh
bHNlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LnNp
emUoKSk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXQoCkBAIC04MTM1LDkgKzgzMjMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAg
ICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAg
ICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRp
b25JbmZvKCkpOwotICAgICAgICAKKwogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlvbiA9
PSBtX291dC5ib29sZWFuVHJ1ZSkgeworICAgICAgICAgICAgZW1pdE9TUkV4aXRDYWxsKGV4aXQs
IGxvd1ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDcwIEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWIK
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorQXNzZW1ibHlIZWxwZXJz
OjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgKKyAgICBKU1ZhbHVl
UmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgcmVzdWx0Owor
CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpCb3R0b206CisgICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChicmFuY2hJZk5vdEJvb2xlYW4ocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFu
Y2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RJ
bnQzMihyZWdzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51
bWJlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdzLCB0ZW1w
R1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIHJlZ3MucGF5bG9hZEdQUigp
LCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAgIEp1bXAg
b2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoU3Ry
dWN0dXJlKE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUo
KSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhl
cihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5
bG9hZEdQUigpKSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlO
YU4oRlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFu
Y2hEb3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzE5LDYgKzcxOSw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIEp1bXBMaXN0IGJy
YW5jaElmTm90VHlwZShKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IEp1bXAgYnJhbmNoU3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxl
ZnRIYW5kU2lkZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzcsNyArMzc3
LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAg
ICAgcHRyZGlmZl90IG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UgPSBvZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAmJiBNYWNy
b0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRUb1BhdGNoZWRTdG9y
YWdlKQotICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVy
cmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CiAKICAgICAgICAgICAgICAgICByZXBhdGNoQnlJ
ZFNlbGZBY2Nlc3MoCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMzLDYgKzYzMyw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRf
YnlfaWQKICAgICAgICAgcGNbNV0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gb2Zmc2V0CiAgICAg
ICAgIHBjWzZdLnUucG9pbnRlciA9IG51bGxwdHI7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICAgICAg
cGNbN10udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gc3RydWN0dXJlIGNoYWluCisgICAgICAgIHBj
WzhdLnUucHV0QnlJZEZsYWdzID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFn
cz4ocGNbOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkUGVyc2lzdGVudEZsYWdzTWFzayk7CiAg
ICAgICAgIAogICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKQEAg
LTY2MCwxMiArNjYyLDE4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlf
aWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNl
dCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGljX2Nhc3Q8UHV0QnlJ
ZEZsYWdzPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFn
cyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVE
ZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgcGNbNF0udS5zdHJ1Y3R1cmVJRCA9
IHN0cnVjdHVyZS0+aWQoKTsKICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0g
c3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAgICAgICAgICAgICAgICAgICAgcGNbOF0udS5w
dXRCeUlkRmxhZ3MgfAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlw
ZURlc2NyaXB0b3JGb3IoaWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTg5ODEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTEyNjUsMTQgKzEyNjUsODcgQEAgX2xsaW50X29wX3B1dF9ieV9p
ZDoKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDEsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHQzLCB0MCwgLm9w
UHV0QnlJZFNsb3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDIKLSAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmluZXEgdDIsIHQxLCAub3BQdXRC
eUlkU2xvdworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MikKKyAgICBiaW5lcSB0Miwg
SlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAogICAgICMgQXQgdGhp
cyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJyZW50IHN0cnVjdHVyZSBJRAor
ICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+IG9iamVjdCBiYXNl
CiAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig4LCB0MSkKKworICAg
ICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVjdCBiYXNlCisgICAg
IyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1cnJlbnQgc3RydWN0dXJlIElE
CisgICAgIyB0MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56IHQxLCBQdXRCeUlkUHJpbWFy
eVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIK
KworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlwZSBjaGVja3MuIEZp
bmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaywgdDEK
KyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJZFR5cGVD
aGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzog
U3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAgIGJwbHQgdDEsIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2Jq
ZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3RoZXIgb3IgVG9wLgor
ICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRCeUlkRG9uZUNoZWNr
aW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3RoZXIuCisgICAgYnRx
eiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorLm9wUHV0QnlJZFR5cGVD
aGVja090aGVyOgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDMKKyAgICBicWVxIHQzLCBW
YWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlk
U2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyOgorICAgICMg
V2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAu
b3BQdXRCeUlkU2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nLCAu
b3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0
cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlk
U2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBiYmFlcSBKU0NlbGw6Om1fdHlw
ZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAu
b3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmc6CisgICAg
IyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIsIElu
dDMyLCBOdW1iZXIKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyLCAub3BQ
dXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBXZSBhcmUgZWl0aGVyIEludDMy
IG9yIE51bWJlci4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciwgLm9w
UHV0QnlJZFR5cGVDaGVja051bWJlcgorCisgICAgYnFhZXEgdDMsIHRhZ1R5cGVOdW1iZXIsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQ
dXRCeUlkVHlwZUNoZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0YWdUeXBlTnVtYmVyLCAub3BQ
dXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0
QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xs
b3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBuZXEgdDEsIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlQm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXIKKyAgICB4
b3JxIFZhbHVlRmFsc2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrQm90
dG9tT3JPdGhlcjoKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQ
dXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJ
ZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJ0cG56IHQxLCBQdXRC
eUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlLCAub3BQdXRCeUlkVHlwZUNoZWNrT2Jq
ZWN0V2l0aFN0cnVjdHVyZQorICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkVHlwZUNo
ZWNrT3RoZXIKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAg
dXJzaGlmdHAgMywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwg
Lm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzOgogICAgIGxvYWRp
c0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90
VHJhbnNpdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDQsNiArMjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBMb3dlc3RUYWcgPSBEZWxldGVkVmFs
dWVUYWcKIGVuZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbiBzeW5jIHdp
dGggd2hhdCBpcyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU1h
c2sgPSAweDYKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MAorY29uc3Qg
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MgorY29uc3QgUHV0QnlJ
ZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQKK2NvbnN0IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90
dG9tID0gMHgwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgKK2NvbnN0
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZUludDMyID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIw
Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgKK2NvbnN0IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmpl
Y3RPck90aGVyID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCisK
IGNvbnN0IENhbGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQgb3IgQVJNNjQgb3IgQ19MT09Q
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6OnNfaW5mbyA9IHsg
IkluZmVycmVkVHlwZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlKSB9
OworCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJ
bmZlcnJlZFR5cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVk
VHlwZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0g
c3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlLT5JbmZl
cnJlZFR5cGU6On5JbmZlcnJlZFR5cGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJl
ZFR5cGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisKKyAgICBpZiAoaW5mZXJyZWRU
eXBlLT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxp
emVyKCZpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJlLT5tX2ZpbmFsaXplcik7Cit9CisKK0luZmVy
cmVkVHlwZTo6S2luZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxh
Z3MpCit7CisgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2spIHsKKyAg
ICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAgICAgc3dpdGNoIChmbGFn
cyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlQm90dG9tOgorICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICAgICAgY2Fz
ZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gQm9vbGVh
bjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyOgorICAgICAgICAgICAg
cmV0dXJuIE90aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzI6Cisg
ICAgICAgICAgICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5
cGVOdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gTnVtYmVyOworICAgICAgICBjYXNlIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlU3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAg
ICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBP
YmplY3Q7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyOgor
ICAgICAgICAgICAgcmV0dXJuIE9iamVjdE9yT3RoZXI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNl
Y29uZGFyeVR5cGVUb3A6CisgICAgICAgICAgICByZXR1cm4gVG9wOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHJldHVybiBCb3R0b207CisgICAgICAgIH0KKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9i
amVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJlOwor
ICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Cisg
ICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQm90
dG9tOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNC
b29sZWFuKCkpCisgICAgICAgIHJldHVybiBCb29sZWFuOworICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQor
ICAgICAgICByZXR1cm4gTnVtYmVyOworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAg
ICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmlzU3Ry
aW5nKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAgICBpZiAoY2VsbC0+aXNP
YmplY3QoKSkgeworICAgICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXNj
cmlwdG9yKE9iamVjdFdpdGhTdHJ1Y3R1cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRvcDsKK30K
KworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9y
RmxhZ3MoVk0mIHZtLCBQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7CisgICAgS2luZCBraW5kID0ga2lu
ZEZvckZsYWdzKGZsYWdzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBpZiAoaGFz
U3RydWN0dXJlKGtpbmQpKQorICAgICAgICBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQoZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKTsKKyAgICBlbHNlCisgICAgICAg
IHN0cnVjdHVyZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIERlc2NyaXB0b3Ioa2luZCwgc3RydWN0
dXJlKTsKK30KKworUHV0QnlJZEZsYWdzIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cHV0QnlJ
ZEZsYWdzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9t
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFy
eVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSk7CisgICAgY2FzZSBC
b29sZWFuOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlk
UHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4pOworICAg
IGNhc2UgT3RoZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIpOwor
ICAgIGNhc2UgSW50MzI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+
KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIp
OworICAgIGNhc2UgTnVtYmVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZs
YWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51
bWJlcik7CisgICAgY2FzZSBTdHJpbmc6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlU3RyaW5nKTsKKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPYmplY3QpOworICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwg
UHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyKTsKKyAgICBjYXNlIFRvcDoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vj
b25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3ApOworICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAg
ICAgICAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlIHwgZW5jb2RlU3Ry
dWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAg
ICAgICAgICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIHwg
ZW5jb2RlU3RydWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUHV0QnlJZE5vbmU7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjptZXJnZShjb25zdCBEZXNjcmlwdG9yJiBvdGhl
cikKK3sKKyAgICAvLyBGaWx0ZXIgb3V0IGNvbW1vbiB0aGluZ3MgdG8gc2ltcGxpZnkgdGhlIHN3
aXRjaCBzdGF0ZW1lbnQgYmVsb3cuCisgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG90aGVyLm1fa2luZCA9PSBCb3R0b20pCisgICAgICAgIHJldHVybjsK
KworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0aGlz
ID0gb3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2FzZSBT
dHJpbmc6CisgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBP
dGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICAgICAgKnRoaXMgPSBEZXNjcmlwdG9yKE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyLCBvdGhlci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgT2JqZWN0OgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhp
cyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIGNhc2UgSW50MzI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAg
ICAgIGNhc2UgTnVtYmVyOgorICAgICAgICAgICAgKnRoaXMgPSBOdW1iZXI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgTnVtYmVyOgorICAgICAgICBz
d2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6
CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZTogLy8gSWYgd2Ugc2VlIHRoaXMgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhl
IHN0cnVjdHVyZXMgZGlkbid0IG1hdGNoLgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAg
ICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09
IG90aGVyLm1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGhpcyA9
IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0
T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBzd2l0
Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Cisg
ICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjogLy8gSWYgd2Ugc2VlIHRoaXMgaGVyZSwgdGhlbiB3ZSBr
bm93IHRoYXQgdGhlIHN0cnVjdHVyZXMgZGlkbid0IG1hdGNoLgorICAgICAgICBjYXNlIE9iamVj
dE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgICp0
aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2lu
ZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBj
YXNlIE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBj
YXNlIFRvcDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpyZW1vdmVT
dHJ1Y3R1cmUoKQoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOgorICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICp0aGlzID0gT2JqZWN0
T3JPdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpzdWJzdW1lcyhjb25z
dCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBEZXNjcmlwdG9yIG1lcmdlZCA9ICp0
aGlzOworICAgIG1lcmdlZC5tZXJnZShvdGhlcik7CisgICAgcmV0dXJuICp0aGlzID09IG1lcmdl
ZDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fa2luZCk7CisgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICBvdXQucHJpbnQoIjoi
LCBpbkNvbnRleHQoKm1fc3RydWN0dXJlLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVt
cEluQ29udGV4dChvdXQsIG51bGxwdHIpOworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlw
ZShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuZ2V0KCkp
CisgICAgLCBtX3dhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQoreworfQorCitJbmZlcnJl
ZFR5cGU6On5JbmZlcnJlZFR5cGUoKQoreworfQorCitib29sIEluZmVycmVkVHlwZTo6Y2FuV2F0
Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJiBl
eHBlY3RlZCkKK3sKKyAgICBpZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0gZXhwZWN0
ZWQ7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJiBl
eHBlY3RlZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
IHJldHVybiBjYW5XYXRjaChsb2NrZXIsIGV4cGVjdGVkKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6OmFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRj
aHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGRlc2NyaXB0b3IobG9j
a2VyKS5raW5kKCkgIT0gVG9wKTsKKworICAgIG1fd2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2lu
dCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICBhZGRXYXRjaHBvaW50KGxvY2tlciwgd2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJhd1Bv
aW50ZXIodGhpcyksICI6IiwgZGVzY3JpcHRvcigpKTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6
OndpbGxTdG9yZVZhbHVlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBEZXNjcmlwdG9yIG15VHlwZSA9IGRl
c2NyaXB0b3IobG9ja2VyKTsKKyAgICBEZXNjcmlwdG9yIG90aGVyVHlwZSA9IERlc2NyaXB0b3I6
OmZvclZhbHVlKHZhbHVlKTsKKworICAgIG15VHlwZS5tZXJnZShvdGhlclR5cGUpOworCisgICAg
QVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSAhPSBteVR5cGUpOyAvLyBUaGUgdHlwZSBtdXN0IGhh
dmUgY2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgorCisgICAgc2V0KGxvY2tlciwg
dm0sIG15VHlwZSk7CisKKyAgICByZXR1cm4ga2luZChsb2NrZXIpICE9IFRvcDsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6Om1ha2VUb3BTbG93KFZNJiB2bSkKK3sKKyAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHNldChsb2NrZXIsIHZtLCBUb3ApOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6c2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
Vk0mIHZtLCBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IpCit7CisgICAgLy8gV2Ugd2lsbCB0cmln
Z2VyIHdyaXRlIGJhcnJpZXJzIHdoaWxlIGhvbGRpbmcgb3VyIGxvY2suIEN1cnJlbnRseSwgd3Jp
dGUgYmFycmllcnMgZG9uJ3QgR0MsIGJ1dCB0aGF0CisgICAgLy8gY291bGQgY2hhbmdlLiBJZiBp
dCBkb2VzLCB3ZSBkb24ndCB3YW50IHRvIGRlYWRsb2NrLiBOb3RlIHRoYXQgd2UgY291bGQgaGF2
ZSB1c2VkCisgICAgLy8gR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBpbiB0aGUgY2FsbGVyLCBi
dXQgdGhlIGNhbGxlciBpcyBvbiBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJl
CisgICAgLy8gYSBnb29kIGlkZWEuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhl
YXApOworICAgIAorICAgIC8vIEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFu
Z2luZyB0aGUgdHlwZSwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgorICAgIGlm
IChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhlIG5ldyBkZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5lcmFsIHRoYW4gdGhl
IHByZXZpb3VzIG9uZS4KKyAgICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJzdW1lcyhkZXNjcmlw
dG9yKGxvY2tlcikpKTsKKworICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRvcnMgaGF2ZSBkaWZm
ZXJlbnQgc3RydWN0dXJlcywgdGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNlIG9uZSBpcyBudWxs
LgorICAgIGlmIChkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0gbmV3RGVzY3JpcHRv
ci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0
dXJlKCkgfHwgIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8gV2UgYXJlIGNo
YW5naW5nIHRoZSB0eXBlLCBzbyBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUgd2FzIHdhdGNoaW5n
LCB0aGV5IGZpbmQgb3V0IGFib3V0IGl0IG5vdy4gSWYKKyAgICAvLyBhbnlvbmUgaXMgd2F0Y2hp
bmcsIHdlIG1ha2Ugc3VyZSB0byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24ndCBkbyB0aGlzIHNv
cnQgb2YgdGhpbmcgYWdhaW4uCisgICAgaWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IENs
ZWFyV2F0Y2hwb2ludCkgeworICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVuIGludmFsaWRh
dGVkLCBzaW5jZSBpZiB3ZSB3ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBUb3AuCisgICAg
ICAgIEFTU0VSVChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKKwor
ICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdzIGJlY2F1c2Ugc29t
ZSBjb21waWxlciB0aHJlYWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5kCisgICAgICAg
IC8vIHRoZW4gdGhlIHR5cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBj
cmF6eSwgYW5kIGRvbid0IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgorICAgICAgICAvLyBp
dC4KKyAgICAgICAgbmV3RGVzY3JpcHRvciA9IFRvcDsKKworICAgICAgICBtX3dhdGNocG9pbnRT
ZXQuZmlyZUFsbCgiSW5mZXJyZWQgdHlwZSBjaGFuZ2VkIik7CisgICAgfQorCisgICAgLy8gUmVt
b3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdlciBuZWVk
IGl0LgorICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgbV9zdHJ1
Y3R1cmUgPSBudWxscHRyOworCisgICAgLy8gQWRkIGEgbmV3IEluZmVycmVkU3RydWN0dXJlIG9i
amVjdCBpZiB3ZSBuZWVkIG9uZSBub3cuCisgICAgaWYgKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJl
KCkpIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91
bGQgYWdyZWUgb24gdGhlIHN0cnVjdHVyZXMgaWYgd2UgZ2V0IGhlcmUuCisgICAgICAgICAgICBB
U1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJl
KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1h
a2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmUtPm1fd2F0Y2hwb2ludCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KKyAgICBt
X2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2VydCB0aGF0IHdlIGRp
ZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9y
KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgVk0m
IHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOworICAgIAorICAgIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvciA9IGRl
c2NyaXB0b3IobG9ja2VyKTsKKyAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0cnVjdHVyZSgpOwor
ICAgIAorICAgIHNldChsb2NrZXIsIHZtLCBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0
IEZpcmVEZXRhaWwmKQoreworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVy
ZSA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAorICAgICAgICAg
ICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0
cnVjdHVyZSwgbV93YXRjaHBvaW50KSk7CisKKyAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJl
bnQtPnJlbW92ZVN0cnVjdHVyZSgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRT
dHJ1Y3R1cmVGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBJbmZl
cnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8
SW5mZXJyZWRTdHJ1Y3R1cmUqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fZmluYWxpemVyKSk7CisK
KyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoaW5mZXJyZWRTdHJ1Y3R1cmUtPm1fcGFyZW50KSk7
CisgICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9zdHJ1
Y3R1cmUuZ2V0KCkpKQorICAgICAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQtPnJlbW92
ZVN0cnVjdHVyZSgpOworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpJbmZl
cnJlZFN0cnVjdHVyZShWTSYgdm0sIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBw
YXJlbnQsIHN0cnVjdHVyZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgb3V0LnByaW50
KCJCb3R0b20iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29s
ZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBv
dXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6TnVtYmVyOgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJp
bmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRo
U3RydWN0dXJlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAg
ICAgb3V0LnByaW50KCJPYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAg
IG91dC5wcmludCgiVG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZV9oCisjZGVmaW5lIEluZmVy
cmVkVHlwZV9oCisKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkpT
Q2VsbC5oIgorI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgaXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRo
ZSBpbmZlcmVuY2Ugb2YgdGhlIHR5cGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgorCitjbGFzcyBJ
bmZlcnJlZFR5cGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEluZmVycmVkVHlwZSogY3JlYXRlKFZNJik7CisK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisg
ICAgZW51bSBLaW5kIDogdWludDhfdCB7CisgICAgICAgIEJvdHRvbSwKKyAgICAgICAgQm9vbGVh
biwKKyAgICAgICAgT3RoZXIsCisgICAgICAgIEludDMyLAorICAgICAgICBOdW1iZXIsCisgICAg
ICAgIFN0cmluZywKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZSwKKyAgICAgICAgT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXIsCisgICAgICAgIE9iamVjdCwKKyAgICAgICAgT2JqZWN0T3JP
dGhlciwKKyAgICAgICAgVG9wCisgICAgfTsKKworICAgIHN0YXRpYyBLaW5kIGtpbmRGb3JGbGFn
cyhQdXRCeUlkRmxhZ3MpOworICAgIAorICAgIHN0YXRpYyBib29sIGhhc1N0cnVjdHVyZShLaW5k
IGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGFzcyBEZXNjcmlwdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlc2NyaXB0b3IoKQorICAgICAgICAgICAgOiBtX2tp
bmQoQm90dG9tKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBEZXNjcmlwdG9yKEtpbmQga2luZCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBudWxscHRyKQorICAgICAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAg
ICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
aGFzU3RydWN0dXJlKGtpbmQpKQorICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yVmFsdWUoSlNWYWx1ZSk7
CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9yRmxhZ3MoVk0mLCBQdXRCeUlkRmxhZ3Mp
OworCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9raW5kID09IEJvdHRvbSAmJiAhbV9zdHJ1Y3R1cmU7CisgICAg
ICAgIH0KKworICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsg
fQorCisgICAgICAgIFB1dEJ5SWRGbGFncyBwdXRCeUlkRmxhZ3MoKSBjb25zdDsKKworICAgICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICAgICAgY2FzZSBCb3R0
b206CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBCb29s
ZWFuOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKKyAgICAgICAg
ICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCk7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nOgor
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpOworICAgICAgICAgICAgY2Fz
ZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Nl
bGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmU7CisgICAg
ICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCisgICAgICAgICAgICAgICAgICAgIHx8
ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9zdHJ1
Y3R1cmUpOworICAgICAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgdmFsdWUuaXNP
YmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgVG9wOgorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2Ny
aXB0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09IG90aGVy
Lm1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1
cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9raW5kKTsK
KyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNvbnN0IERlc2NyaXB0b3ImKTsK
KyAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvdGhlciBvbmUu
CisgICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYpIGNvbnN0OworCisgICAg
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgS2luZCBtX2tpbmQ7CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Cisg
ICAgfTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NrOyB9CisKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhyZWFkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9zdHJ1Y3R1cmUgPyBtX3N0
cnVjdHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICB9CisgICAgCisgICAgRGVzY3Jp
cHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7CisgICAgfQorICAgIERlc2Ny
aXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpOwor
ICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpOyB9CisKKyAgICBi
b29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFRvcDsgfQorICAgIGJvb2wgaXNS
ZWxldmFudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7IH0KKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJlbGV2YW50IGFmdGVyIHRoZSBz
dG9yZS4gSXQncyBub3QgcmVsZXZhbnQgaWYgaXQncyBUb3AuCisgICAgQUxXQVlTX0lOTElORSBi
b29sIHdpbGxTdG9yZVZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IERlc2NyaXB0b3IgY3VycmVudERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yTWFpblRocmVhZCgpOwor
ICAgICAgICBpZiAoY3VycmVudERlc2NyaXB0b3IuaW5jbHVkZXNWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gY3VycmVudERlc2NyaXB0b3Iua2luZCgpICE9IFRvcDsKKyAgICAgICAg
cmV0dXJuIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgdmFsdWUpOworICAgIH0KKworICAgIC8vIElt
bWVkaWF0ZWx5IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50LgorICAgIHZvaWQgbWFrZVRvcChW
TSYgdm0pCisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbWFrZVRvcFNsb3codm0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBpdCBjdXJyZW50bHkgbWFrZXMgc2Vuc2UgdG8gd2F0Y2ggdGhpcyBJbmZlcnJlZFR5cGUgZm9y
IHRoaXMgZGVzY3JpcHRvci4gTm90ZSB0aGF0CisgICAgLy8gdGhpcyB3aWxsIGFsd2F5cyByZXR1
cm4gZmFsc2UgZm9yIFRvcC4KKyAgICBib29sIGNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYpOworICAgIGJvb2wgY2FuV2F0Y2goY29u
c3QgRGVzY3JpcHRvciYpOworICAgIAorICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqKTsKKyAgICB2b2lkIGFkZFdhdGNo
cG9pbnQoV2F0Y2hwb2ludCopOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKFZNJik7CisgICAgfkluZmVycmVkVHlwZSgp
OworCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZVNsb3coVk0mLCBKU1ZhbHVlKTsKKyAgICB2b2lk
IG1ha2VUb3BTbG93KFZNJik7CisgICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIFZNJiwgRGVzY3JpcHRvcik7CisgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAg
IG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworICAgIAorICAgIEtpbmQgbV9raW5k
IHsgQm90dG9tIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgOiBw
dWJsaWMgV2F0Y2hwb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVy
ZVdhdGNocG9pbnQoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmlyZUludGVy
bmFsKGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworCisgICAgY2xhc3MgSW5m
ZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7
CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcigpIHsgfQor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92
ZXJyaWRlOworICAgIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSB7CisgICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRT
dHJ1Y3R1cmUoVk0mLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7CisKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQo
KTsgfTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBJbmZlcnJlZFR5cGU7
CisgICAgICAgIGZyaWVuZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcjsKKyAgICAgICAgCisg
ICAgICAgIEluZmVycmVkVHlwZSogbV9wYXJlbnQ7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fc3RydWN0dXJlOworCisgICAgICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2lu
dCBtX3dhdGNocG9pbnQ7CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyIG1fZmlu
YWxpemVyOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOworCisgICAgLy8gTk9URTogSWYgdGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3
ZSB0cmFuc2Zvcm0gdG8gVG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgaXQgd291bGRuJ3Qg
YmUKKyAgICAvLyBwcm9maXRhYmxlIHRvIHdhdGNoIGl0IGFnYWluLiBBbHNvLCB0aGlzIHNldCBp
cyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIERGRworICAg
IC8vIHRocmVhZC4gVGhlIERGRyB3aWxsIHVzZSB0aGUgSW5mZXJyZWRUeXBlIGFzIHRoZSB0aGlu
ZyB0aGF0IGl0IHdhdGNoZXMuCisgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3dhdGNocG9pbnRT
ZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6SW5mZXJyZWRUeXBlOjpLaW5kKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRUeXBlVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZVRh
YmxlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGVUYWJsZSIsIDAsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSW5mZXJyZWRUeXBlVGFibGUpIH07CisKK0luZmVycmVkVHlwZVRhYmxlKiBJbmZlcnJl
ZFR5cGVUYWJsZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogcmVz
dWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlVGFibGU+KHZtLmhl
YXApKSBJbmZlcnJlZFR5cGVUYWJsZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlw
ZVRhYmxlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKyAgICBpbmZl
cnJlZFR5cGVUYWJsZS0+SW5mZXJyZWRUeXBlVGFibGU6On5JbmZlcnJlZFR5cGVUYWJsZSgpOwor
fQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0g
anNDYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihpbmZlcnJlZFR5cGVUYWJsZS0+bV9sb2NrKTsKKyAgICAKKyAgICBmb3IgKGF1
dG8mIGVudHJ5IDogaW5mZXJyZWRUeXBlVGFibGUtPm1fdGFibGUpIHsKKyAgICAgICAgaWYgKGVu
dHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZW50
cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS52YWx1ZS5jbGVhcigp
OworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIGF1
dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOworICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5k
KCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFRh
a2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBlcy4KKyAgICBpZiAo
IWl0ZXItPnZhbHVlLT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIo
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGl0ZXItPnZh
bHVlLmdldCgpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCB1aWQpOworfQorCitJbmZlcnJlZFR5cGUq
IEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBl
VGFibGU6OndpbGxTdG9yZVZhbHVlKAorICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIC8vIFRo
ZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQg
bW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIAorICAgIGlmIChhZ2UgPT0gT2xkUHJvcGVydHkp
IHsKKyAgICAgICAgVGFibGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5kKHByb3Bl
cnR5TmFtZS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0
ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYnNlbmNlIG9uIHJlcGxh
Y2UgPT4gdG9wLgorICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT53aWxsU3RvcmVW
YWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAg
ICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5h
ZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAg
ICB9CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEluZmVycmVkVHlwZSog
aW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwg
dGhpcywgaW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3AoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgLy8g
VGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVh
ZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0eSkgewor
ICAgICAgICBUYWJsZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVydHlO
YW1lLnVpZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+
dmFsdWUpCisgICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3Au
CisKKyAgICAgICAgaXRlci0+dmFsdWUtPm1ha2VUb3Aodm0pOworICAgICAgICBpdGVyLT52YWx1
ZS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRS
ZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgp
LCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAgaWYgKCFyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+bWFrZVRvcCh2bSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVh
cigpOworfQorCitJbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFibGUoVk0mIHZtKQor
ICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCit7Cit9
CisKK0luZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlVGFibGVf
aAorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0YWJsZSBvZiBp
bmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBKU0NlbGwgYmVjYXVz
ZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVzdHJ1Y3RvciBhbmQgbWFrZXMg
bGlmZXR5cGUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNlIGl0J3MgYSBjZWxs
LCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJlIGRlbGV0ZWQgd2hpbGUgdGhl
IERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVydHlUYWJsZSBiZWNh
dXNlIG1vc3QgcHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZlcnJlZFR5cGUsIHNp
bmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5b3UgdGhpbmsgb2Yg
ImEgcHJvcGVydHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21lIFN0cnVjdHVyZSIp
LiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlwZXMgb2YgcHJvcGVydGll
cyBmcm9tCisvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRoZSBzdHJ1Y3R1cmVzIHJl
cHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2NsYXNzIEluZmVycmVkVHlwZVRh
YmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwg
QmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7CisKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAg
Q29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBH
ZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBib3RoIFRv
cCBhbmQgQm90dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKKyAgICAvLyBvd25pbmcgU3Ry
dWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHkuCisgICAgSW5mZXJyZWRUeXBl
KiBnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7Cisg
ICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5
cGUqIGdldChQcm9wZXJ0eU5hbWUpOworCisgICAgZW51bSBTdG9yZWRQcm9wZXJ0eUFnZSB7Cisg
ICAgICAgIE5ld1Byb3BlcnR5LAorICAgICAgICBPbGRQcm9wZXJ0eQorICAgIH07CisgICAgCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkg
aXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8vIHJlbGV2
YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1
bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCisgICAgLy8gSW52YWxpZGF0ZXMgdGhl
IHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEg
cmVmbGVjdGl2ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5TmFtZSwg
U3RvcmVkUHJvcGVydHlBZ2UpOworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZVRhYmxlKFZN
Jik7CisgICAgfkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICAvLyBCb3R0b206IGFic2VuY2Ug
ZnJvbSB0YWJsZS4KKyAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1ZS0+aXNS
ZWxldmFudCgpLCBvciBhYnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8KKyAgICAvLyBXZSBrbm93
IGhvdyB0byBkZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0b20gb3Ig
dG9wIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIC8vIHByb3BlcnR5IGlzIHByZXNlbnQg
aW4gdGhlIG93bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVy
ZSwgYWJzZW5jZSBtYXkgaGF2ZQorICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIHdheSB0
aGF0IHRoaXMgY2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBrbm93cyBv
ZiB0aGUgcHJvcGVydHkKKyAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBh
Y3Rpb25zOiByZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5ldyBwcm9w
ZXJ0eQorICAgIC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRvbS4gSWYg
d2UncmUgc3RvcmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSwgdGhlbgorICAg
IC8vIGFic2VuY2UgbWVhbnMgdG9wLiBUbyBtYWtlIHRoaXMgd29yaywgd2UgaGF2ZSB0byB3YXRj
aCBvdXQgZm9yIHRoZSBjYXNlIHdoZXJlIHR3byBzdHJ1Y3R1cmVzLCBTMSBhbmQKKyAgICAvLyBT
Miwgc2hhcmUgdGhlIHNhbWUgSW5mZXJyZWRUeXBlVGFibGUgYW5kIG5laXRoZXIgb2YgdGhlbSBp
bml0aWFsbHkga25vdyBhYm91dCBwcm9wZXJ0eSBQLiBTMSBtYXkKKyAgICAvLyB3YW50IHRvIGFk
ZCBQIHdpdGhvdXQgYSB0eXBlLCB3aGlsZSBTMiBtYXkgd2FudCB0byBhZGQgUCB3aXRoIGEgdHlw
ZS4gSWYgUzEgYWRkZWQgUCBhbmQgdXNlZCBhYnNlbmNlCisgICAgLy8gdG8gaW5kaWNhdGUgVG9w
LCB0aGVuIFMyIHdvdWxkIHVzZSB0aGF0IGFic2VuY2UgdG8gbWVhbiBCb3R0b20gYW5kIHdvdWxk
IGVuZCB1cCBjcmVhdGluZyBhIG5vbi1Ub3AKKyAgICAvLyBlbnRyeSBpbiB0aGUgdGFibGUuIFRo
ZW4gUzEgd291bGQgZm9yZ2V0IHRoYXQgaXQgd2FudGVkIFRvcCwgYW5kIHdvdWxkIHVzZSBTMidz
IHR5cGUuIENsZWFybHksCisgICAgLy8gdGhhdCdzIGJhZC4gV2UgYXZvaWQgc3VjaCBjb25mdXNp
b24gYnkgZW5zdXJpbmcgdGhhdCBhIHRyYW5zaXRpb24gYWx3YXlzIGFkZHMgYW4gZW50cnkuIEhl
bmNlLAorICAgIC8vIGFic2VuY2UtbWVhbnMtYm90dG9tIG9ubHkgY29tZXMgaW50byBwbGF5IGZv
ciBwcm9wZXJ0aWVzIGFkZGVkIGJlZm9yZSB0aGUgSW5mZXJyZWRUeXBlVGFibGUgd2FzCisgICAg
Ly8gY3JlYXRlZC4KKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBs
PiwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4sIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJh
aXRzPFVuaXF1ZWRTdHJpbmdJbXBsKj4+IFRhYmxlVHlwZTsKKyAgICAKKyAgICBUYWJsZVR5cGUg
bV90YWJsZTsKKworICAgIC8vIFdlIG9ubHkgZ3JhYiB0aGlzIGxvY2sgd2hlbiB3ZSdyZSBkb2lu
ZyBtb2RpZmljYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCwgb3IgcmVhZHMgb24gdGhlIGNvbXBp
bGVyCisgICAgLy8gdGhyZWFkLiBUaGUgY29tcGlsZXIgdGhyZWFkIGlzIG5vdCBhbGxvd2VkIHRv
IGRvIG1vZGlmaWNhdGlvbnMuCisgICAgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTg5LDYgKzExODksOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoCiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVj
dHVyZSh2bSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAg
QVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAogICAgICAg
ICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMp
OwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTEyMjcsMjkgKzEy
MjksNDAgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlz
LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0
KSkgeworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKAorICAgICAgICBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKKyAgICBpZiAobmV3U3RydWN0dXJlKSB7Cisg
ICAgICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAgICAg
ICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3Bl
cnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIAogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0g
ICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgp
KTsKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBj
dXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
IGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBj
dXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NFUlQo
c3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgc2V0U3RydWN0
dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAg
IHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVy
dHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdW5z
aWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgIGJvb2wgaGFzSW5mZXJyZWRU
eXBlOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnRBdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxp
ZE9mZnNldCkgewogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0
dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICBpZiAoVU5M
SUtFTFkoaGFzSW5mZXJyZWRUeXBlKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3Rv
cmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAg
IH0KKwogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIApAQCAtMTI2OCwxNiArMTI4MSwx
OSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgLy8gd2Ug
d2FudC4KICAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZl
cnJlZFdhdGNocG9pbnRGaXJlOwogICAgIAotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOworICAg
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKAorICAgICAg
ICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5j
b250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1cmUtPndp
bGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAgCiAg
ICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpOwotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZO
ZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CisgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlm
TmVjZXNzYXJ5KHZtLCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYg
KGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1Jl
YWRPbmx5UHJvcGVydGllcygpOworICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVh
ZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzMzUsOCArMTM1
MSwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBpZiAoc3RydWN0
dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdCdXR0ZXJm
bHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KSk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICBib29sIHNob3VsZE9wdGltaXplID0g
ZmFsc2U7CisgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MCwxMSArMzUw
LDE1IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBlbHNl
CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKIAorICAgIElu
ZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOwor
CiAgICAgZm9yIChzaXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
IHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25h
bWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFw
RW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOworICAgICAgICBp
ZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91
cy5nZXQoKSkpCisgICAgICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOwogICAg
ICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6
OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNDY0LDYgKzQ2
OCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFu
c2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQ
cm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZz
ZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OworICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBl
VGFibGUuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRU
eXBlVGFibGUuZ2V0KCkpOwogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCkBAIC00NzksNiArNDg0LDI0IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJl
bW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogeworICAgIC8v
IE5PVEU6IFRoZXJlIGFyZSBzb21lIGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRpcmVjdGx5
IHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnkgcmF0aGVyIHRoYW4KKyAgICAvLyBjYWNoaW5nIHRo
ZSByZW1vdmFsLiBXZSBjYW4gZml4IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBtdXN0IHJl
bWVtYmVyIHRvIGRvIHNvLCBpZiB3ZSBldmVyIHRyeQorICAgIC8vIHRvIG9wdGltaXplIHRoaXMg
Y2FzZS4KKyAgICAvLworICAgIC8vIC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkgc3RlYWwg
dGhlIHByb3BlcnR5IHRhYmxlLCBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJsZSBiZWNh
dXNlIHRoZXkKKyAgICAvLyAgIGNhbiBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxvb2tpbmcg
YXQgcGFzdCB0cmFuc2l0aW9ucy4gVGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFibGUgb25s
eQorICAgIC8vICAgZ3JldyBhbmQgbmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92YWxzLCB3
ZSdkIGhhdmUgdG8gY2hhbmdlIHRoZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRpb24KKyAg
ICAvLyAgIGNvZGUgdG8gaGFuZGxlIGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dpYyB0byBn
ZXQgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0CisgICAgLy8gICBs
YWNrcyBhIHByb3BlcnR5IHRhYmxlIGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2ggdGhlIHNl
dCBvZiB0cmFuc2l0aW9ucyBzaW5jZSB0aGUgbGFzdAorICAgIC8vICAgc3RydWN0dXJlIHRoYXQg
aGFkIGEgcGlubmVkIHRhYmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFu
Z2VkIHRvIGhhbmRsZSBjYWNoZWQKKyAgICAvLyAgIHJlbW92YWxzLgorICAgIC8vCisgICAgLy8g
LSBJbmZlcnJlZFR5cGVUYWJsZSBhc3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIgaGFwcGVu
ZWQuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIGlmIHdlIGNvdWxkCisgICAgLy8gICByZW1vdmUg
YSBwcm9wZXJ0eSBhbmQgdGhlbiByZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNlbmNlIG1l
YW5zIHRvcCIgb3B0aW1pemF0aW9uIHdvdWxkbid0CisgICAgLy8gICB3b3JrIGFueW1vcmUsIHVu
bGVzcyByZW1vdmFsIGFsc28gZWl0aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChieSBkb2lu
ZyBzb21ldGhpbmcgZXF1aXZhbGVudCB0bworICAgIC8vICAgaGFzQmVlbkRpY3Rpb25hcnkpIG9y
IGJ5IHN0cm9uZ2x5IG1hcmtpbmcgdGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0aGF0IGl0
IGlzIG5vdCBhYnNlbnQsIGJ1dAorICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBlbnRyeS4K
KyAgICAKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7
CiAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CkBAIC04NDEsNiArODY0LDQzIEBAIHZvaWQgU3RydWN0
dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJv
cGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygK
KyAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkT3B0aW1pemUsCisgICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5
QWdlIGFnZSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOworICAgIEFTU0VSVCghaGFz
QmVlbkRpY3Rpb25hcnkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5cGUgdGFi
bGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0MgYWZ0ZXIg
d2UgaGF2ZSBhbHJlYWR5CisgICAgLy8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUgcHJvcGVy
dHkgbWFwLgorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFi
bGUuZ2V0KCk7CisgICAgaWYgKCF0YWJsZSkgeworICAgICAgICB0YWJsZSA9IEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAg
ICAgICBtX2luZmVycmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKwor
ICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNh
bGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29u
ZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhh
dmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisg
ICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5
TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7
CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAg
ZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYWdlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Ao
dm0sIHByb3BlcnR5TmFtZSwgYWdlKTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9
IGZhbHNlOworICAgIH0KK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVy
dHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0x
MDU4LDYgKzExMTgsOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNh
ZmUpOwogICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQog
ICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAog
Ym9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5o
IgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxl
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTVHlwZS5oIgpAQCAtODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5
IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8v
IFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5
cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hl
Y2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVu
dHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBl
KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9w
ZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZz
ZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVy
cmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09
IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0
IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3Bl
cnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJv
b2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJu
YWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhv
bGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVl
IHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ4
MSw2ICs0ODYsNDAgQEAgcHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNo
aW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wg
aGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVy
cmVkVHlwZVRhYmxlOworICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9y
KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBl
VGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0YWJsZS0+Z2V0KHVpZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiBy
ZXN1bHQgPSBpbmZlcnJlZFR5cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQt
PmRlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisg
ICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFy
eSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6TmV3UHJvcGVydHkp
OworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNl
KAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFi
bGU6Ok9sZFByb3BlcnR5KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBl
PiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYg
dGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVz
ZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02MzIsNiArNjcxLDkgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgd2lsbFN0b3JlVmFsdWVTbG93KAorICAgICAgICBWTSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5
QWdlKTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7
CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0
QnlJZCA9IDUxMjsKIApAQCAtNjU1LDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxk
IGJlIGFjY2Vzc2VkIHRocm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBi
ZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlU
YWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVk
VHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRj
aHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VS
VChmaXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsMTkgKzc1LDE5IEBA
IGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAogQUxXQVlTX0lOTElO
RSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBQcm9wZXJ0eVRh
YmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQotICAgICAgICBy
ZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJv
cGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8g
ZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
KyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5F
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5
cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZl
cnJlZFR5cGUpOworfQorCitBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSkKK3sKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25U
aHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkp
OwogCkBAIC0xMDEsNiArMTAxLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OgogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMg
PSBlbnRyeS0+YXR0cmlidXRlczsKKyAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5m
ZXJyZWRUeXBlOwogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcg
QEAKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkluZmVycmVk
VHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKQEAgLTI0MSw2ICsyNDIsOCBAQCBW
TTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvcGVydHlUYWJs
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdl
YWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5m
ZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlw
ZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rp
b25SYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDggQEAgcHVi
bGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZl
cnJlZFR5cGVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlVGFi
bGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261284</attachid>
            <date>2015-09-15 19:30:22 -0700</date>
            <delta_ts>2015-09-15 20:44:19 -0700</delta_ts>
            <desc>it passes many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>183381</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNB
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJB
OEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBG
RkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZF
ODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZC
MUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAw
NzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAv
KiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIg
LyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBC
QUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYw
IC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUy
MTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQv
TExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0
QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
ZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8s
CiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJ
CQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBA
IC00Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8q
IEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2
IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0
NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQx
LDYgKzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1
Mjk2LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyog
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBG
NTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRF
QzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAog
CQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8s
CiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0
NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJ
CQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4
NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZB
OTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1
NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0
OTcsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJ
CQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcx
REQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFC
ODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4Niw2ICs2ODYsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
YXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNj
cmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAg
CiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcwOSw2ICs3MTYs
MTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBS
RUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CiAK
KyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJl
ZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJc
biIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2
ZSB0eXBlLlxuIik7CisgICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQdXRC
eUlkRmxhZ3MuaCIKIAorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTM1LDE2ICszNiwxNCBAQCBuYW1lc3BhY2UgV1RG
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsKLSAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJp
bmdPdXQ7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCJ8Iik7CiAgICAgaWYgKGZsYWdzICYgUHV0
QnlJZElzRGlyZWN0KQotICAgICAgICBzdHJpbmdPdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIpOwogCi0gICAgQ1N0cmluZyBz
dHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7Ci0gICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkp
Ci0gICAgICAgIG91dC5wcmludCgiTm9uZSIpOwotICAgIGVsc2UKLSAgICAgICAgb3V0LnByaW50
KHN0cmluZyk7CisgICAgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQgPSBJbmZlcnJlZFR5cGU6Omtp
bmRGb3JGbGFncyhmbGFncyk7CisgICAgb3V0LnByaW50KGNvbW1hLCBraW5kKTsKKyAgICBpZiAo
SW5mZXJyZWRUeXBlOjpoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgIG91dC5wcmludCgiOiIs
IGJpdHdpc2VfY2FzdDxpbnQzMl90PihkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZEZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRGbGFncy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
Niw3MCBAQAogI2lmbmRlZiBQdXRCeUlkRmxhZ3NfaAogI2RlZmluZSBQdXRCeUlkRmxhZ3NfaAog
CisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAotZW51
bSBQdXRCeUlkRmxhZ3MgeworZW51bSBQdXRCeUlkRmxhZ3MgOiBpbnRwdHJfdCB7CiAgICAgUHV0
QnlJZE5vbmUgPSAwLAotICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDEKKworICAgIC8vIFRoaXMgZmxh
ZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHV0X2J5X2lkIGlzIGRpcmVjdC4gVGhhdCBtZWFucyB0aGF0
IHdlIHN0b3JlIHRoZSBwcm9wZXJ0eSB3aXRob3V0CisgICAgLy8gY2hlY2tpbmcgaWYgdGhlIHBy
b3RvdHlwZSBjaGFpbiBoYXMgYSBzZXR0ZXIuCisgICAgUHV0QnlJZElzRGlyZWN0ID0gMHgxLAor
ICAgIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrID0gMHgxLAorCisgICAgLy8gTk9URTogVGhl
IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGluIExvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtLgorCisgICAgLy8gRGV0ZXJtaW5pbmcgdGhlIHJlcXVpcmVkIGluZmVycmVk
IHR5cGUgaW52b2x2ZXMgZmlyc3QgY2hlY2tpbmcgdGhlIHByaW1hcnkgdHlwZSBtYXNrLCBhbmQg
dGhlbgorICAgIC8vIHVzaW5nIHRoYXQgdG8gZmlndXJlIG91dCB0aGUgbWVhbmluZyBvZiB0aGUg
c2Vjb25kYXJ5IG1hc2s6CisgICAgLy8gc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlw
ZU1hc2spIHsKKyAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAv
LyAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgIC8v
ICAgICAuLi4KKyAgICAvLyAgICAgfQorICAgIC8vICAgICBicmVhazsKKyAgICAvLyBjYXNlIFB1
dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgLy8gY2FzZSBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAvLyAgICAgU3RydWN0
dXJlSUQgc3RydWN0dXJlSUQgPSBkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncyk7CisgICAgLy8gICAg
IGJyZWFrOworICAgIC8vIH0KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gMHg2LAorICAg
IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MCwgLy8gTmVlZCB0byBjaGVjayB0aGUg
c2Vjb25kYXJ5IHR5cGUgbWFzayBmb3IgdGhlIHR5cGUuCisgICAgUHV0QnlJZFByaW1hcnlUeXBl
T2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MiwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVy
ZSBJRC4KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9
IDB4NCwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVyZSBJRC4KKworICAgIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlTWFzayA9IC0weDgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20g
PSAweDAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuID0gMHg4LAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50
MzIgPSAweDE4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyID0gMHgyMCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3QgPSAweDMwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9
IDB4MzgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCiB9OwogCitpbmxpbmUg
UHV0QnlJZEZsYWdzIGVuY29kZVN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEIGlkKQoreworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMyk7CisjZWxzZQorICAgIFB1dEJ5SWRGbGFncyBy
ZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCk7CisgICAgQVNTRVJUKCEocmVz
dWx0ICYgflB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZW5kaWYKK30KKworaW5saW5lIFN0cnVjdHVyZUlEIGRlY29kZVN0cnVjdHVyZUlEKFB1dEJ5SWRG
bGFncyBmbGFncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgPj4gMyk7CisjZWxzZQorICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8U3RydWN0dXJlSUQ+KGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKTsKKyNlbmRp
ZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7
CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVy
ZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwpAQCAtMTAzLDcgKzEwMyw4IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0
QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisg
ICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwgbmV3
U3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogfQogCiBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQpAQCAtMTYyLDcgKzE2Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICB9CkBAIC0xOTMsNyArMTk0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9
IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
MjA2LDcgKzIwOCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhT
dGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+aW5mZXJy
ZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTMyOSw4ICszMzIsMTAgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIFNvLCBi
ZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJ
ZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKSkKKworICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQgdmFyaWFudCA9CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRv
ckZvcih1aWQpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMzU2LDEzICszNjEsMTYgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAg
CiAgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVj
dHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwg
dWlkLCAwLCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0
LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihz
dHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHRyYW5z
aXRpb24tPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSkpOwogICAgICAgICBpZiAoIWRp
ZEFwcGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9
IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Cisg
ICAgbV9yZXF1aXJlZFR5cGUgPSBvdGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIu
bV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNl
CkBAIC01MiwxOCArNTMsMjEgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVy
YXRvcgogICAgIHJldHVybiAqdGhpczsKIH0KIAotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03MSw2ICs3
NSw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtODUsNiArOTAsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0
dGVyKAogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6
Om1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVy
cmVkVHlwZTo6VG9wOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzNCw5ICsxNDAsMTIg
QEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogewogICAgIGlmICht
X29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fcmVxdWlyZWRUeXBlICE9IG90aGVyLm1fcmVxdWlyZWRUeXBlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIFJlcGxhY2U6
CisgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAg
ICAgICAgIGNhc2UgUmVwbGFjZTogewogICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSk7CkBAIC0xNTgsNiArMTY3LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2UoY29ucwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAg
ICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CkBAIC0yMTAsMTQgKzIyMCwxNSBAQCB2b2lk
IFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIAogICAgIGNhc2Ug
UmVwbGFjZToKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBp
bkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLAor
ICAgICAgICAgICAgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFRy
YW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjog
IiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAg
ICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwK
LSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZz
ZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlv
blNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRU
eXBlKCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJs
aWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRC
eUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwog
ICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0g
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgc2V0dGVyKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9w
ZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtOTksNiAr
OTksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CiAgICAgfQog
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHJlcXVpcmVkVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFR5cGU7CisgICAgfQorCiAgICAgYm9vbCB3cml0
ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25z
dDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKQEAgLTEzMCw2ICsxMzUsNyBAQCBwcml2
YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CiAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fcmVxdWlyZWRUeXBlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
TW9kZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIK
ICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgiCkBAIC05OCwxMiArOTcsMTAgQEAgc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rp
b24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KICAgICBV
bmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsg
fQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3Bl
cmFuZDsgfQotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oUHV0QnlJZEZsYWdzIGZsYWdzKSB7IHUu
cHV0QnlJZEZsYWdzID0gZmxhZ3M7IH0KICAgICB1bmlvbiB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZTsKICAgICAgICAgaW50MzJfdCBvcGVyYW5kOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsK
LSAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFnczsKICAgICB9IHU7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsMzkgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgdG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKICAgICB9Ci0gICAgCisKKyAgICAv
LyBOb3RlIHRoYXQgZm9yIGFueSB3YXRjaHBvaW50IHRoYXQgaXMgdmlzaWJsZSBmcm9tIHRoZSBE
RkcsIGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byB3cml0ZSBjb2RlIGxpa2U6CisgICAgLy8KKyAg
ICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAg
IC8vCisgICAgLy8gQ29uY3VycmVudGx5IHRvIHRoaXMsIHRoZSBERkcgY291bGQgZG86CisgICAg
Ly8KKyAgICAvLyBpZiAody5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcGVyZm9ybSBvcHRp
bWl6YXRpb25zOworICAgIC8vIGlmICghdy5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcmV0
cnkgY29tcGlsYXRpb247CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgdGhlIERGRyBhbGdvcml0
aG0gaXMgd2lkZXNwcmVhZCwgYW5kIHNvdW5kLCBiZWNhdXNlIGZpcmVBbGwoKSBhbmQgaW52YWxp
ZGF0ZSgpIHdpbGwgbGVhdmUKKyAgICAvLyB0aGUgd2F0Y2hwb2ludCBpbiBhICFpc1N0aWxsVmFs
aWQoKSBzdGF0ZS4gSGVuY2UsIGlmIGZpcmVBbGwoKSBvciBpbnZhbGlkYXRlKCkgaW50ZXJsZWF2
ZWQgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCBpc1N0aWxsVmFsaWQoKSBjaGVjayBhbmQgdGhl
IHNlY29uZCBvbmUsIHRoZW4gaXQgd291bGQgc2ltcGx5IGNhdXNlIHRoZSBERkcgdG8gcmV0cnkK
KyAgICAvLyBjb21waWxhdGlvbiBsYXRlci4KKyAgICAvLworICAgIC8vIEJ1dCwgaWYgeW91IGNo
YW5nZSBzb21lIHBpZWNlIG9mIHN0YXRlIHRoYXQgdGhlIERGRyBtaWdodCBvcHRpbWl6ZSBmb3Is
IGJ1dCBpbnZhbGlkYXRlIHRoZQorICAgIC8vIHdhdGNocG9pbnQgYnkgZG9pbmc6CisgICAgLy8K
KyAgICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQor
ICAgIC8vCisgICAgLy8gdGhlbiB0aGUgREZHIHdvdWxkIG5ldmVyIGtub3cgdGhhdCB5b3UgaW52
YWxpZGF0ZWQgc3RhdGUgYmV0d2VlbiB0aGUgdHdvIGNoZWNrcy4KKyAgICAvLworICAgIC8vIFRo
ZXJlIGFyZSB0d28gd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlzOgorICAgIC8vCisgICAgLy8gLSBD
YWxsIGZpcmVBbGwoKSB3aXRob3V0IGEgaXNCZWluZ1dhdGNoZWQoKSBjaGVjay4gVGhlbiwgdGhl
IERGRyB3aWxsIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBoYXMKKyAgICAvLyAgIGJlZW4gaW52
YWxpZGF0ZWQgd2hlbiBpdCBkb2VzIGl0cyBzZWNvbmQgY2hlY2suCisgICAgLy8KKyAgICAvLyAt
IERvIG5vdCBleHBvc2UgdGhlIHdhdGNocG9pbnQgc2V0IHRvIHRoZSBERkcgZGlyZWN0bHksIGFu
ZCBoYXZlIHlvdXIgb3duIHdheSBvZiB2YWxpZGF0aW5nIHdoZXRoZXIKKyAgICAvLyAgIHRoZSBh
c3N1bXB0aW9ucyB0aGF0IHRoZSBERkcgdGhyZWFkIHVzZWQgYXJlIHN0aWxsIHZhbGlkIHdoZW4g
dGhlIERGRyBjb2RlIGlzIGluc3RhbGxlZC4KICAgICBib29sIGlzQmVpbmdXYXRjaGVkKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChpc0ZhdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEyLDcgKzIxMTIsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8v
IG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVy
ZSBjaGFpbgotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChQdXRCeUlkTm9uZSk7IC8vIGlzIG5v
dCBkaXJlY3QKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PihQdXRC
eUlkTm9uZSkpOyAvLyBpcyBub3QgZGlyZWN0CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0y
MTM0LDcgKzIxMzQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVj
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7IC8vIHN0cnVjdHVyZSBjaGFpbiAodW51c2VkIGlmIGRpcmVjdCkKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0
aWNfY2FzdDxpbnQ+KChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJv
cGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJ
c0RpcmVjdCA6IFB1dEJ5SWROb25lKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3Bl
Y05vbmUpCiAgICAgewotICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCk7
CisgICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0LCBhZG1pdHRlZFR5cGVz
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSw3ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSks
IHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJh
Y3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJy
YXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgyOSwxMCArMTgyOSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1
cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSkpIHsKLSAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9n
cmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOworICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
RmlndXJlIG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEg
Y29uc3RhbnQsIG9yIG1heWJlCiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3Vi
dGxlPwpAQCAtMTg0MSwyMiArMTg0MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2
ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QK
ICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVz
W2ldLm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
IHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJl
c3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE4ODAsNyAr
MTg3MCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFk
eSBlbnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1
Y3R1cmVTZXQoKTsKICAgICAgICAgCkBAIC0xODg4LDEyICsxODc3LDIzIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0
aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1
Y3R1cmUgY2hlY2sKICAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24n
dC4KICAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
ICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVj
T3RoZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAg
CisgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0LCBhZG1pdHRlZFR5cGVzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKQEAgLTIwODQsMTMgKzIwODQsMjkgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zm
c2V0OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0
YW50UHJvcGVydHkoZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIGRhdGEub2Zmc2V0KTsKLSAgICAg
ICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGgu
ZnJlZXplKHJlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1i
ZXJdOworCisgICAgICAgIC8vIEZJWE1FOiBUaGUgcGFydCBvZiB0aGlzIHRoYXQgaGFuZGxlcyBp
bmZlcnJlZCBwcm9wZXJ0eSB0eXBlcyByZWxpZXMgb24gQUkga25vd2luZyB0aGUgc3RydWN0dXJl
CisgICAgICAgIC8vIHJpZ2h0IG5vdy4gVGhhdCdzIHByb2JhYmx5IG5vdCBvcHRpbWFsLiBJbiBz
b21lIGNhc2VzLCB3ZSBtYXkgcGVyZm9ybSBhbiBvcHRpbWl6YXRpb24gKHVzdWFsbHkKKyAgICAg
ICAgLy8gYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gQUksIG1heWJlIGJ5IENTRSBmb3IgZXhhbXBs
ZSkgdGhhdCBvYnNjdXJlcyBBSSdzIHZpZXcgb2YgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyBh
dCB0aGUgcG9pbnQgd2hlcmUgR2V0QnlPZmZzZXQgcnVucy4gQ3VycmVudGx5LCB3aGVuIHRoYXQg
aGFwcGVucywgd2UnbGwgaGF2ZSB0byByZWx5IGVudGlyZWx5CisgICAgICAgIC8vIG9uIHRoZSB0
eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIgd2FzIGFibGUgdG8gcHJvdmUuCisgICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWUgPSBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRo
YXQgdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgor
ICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGVGcm9tUGFyc2luZzsKKyAgICAgICAgdHlwZUZyb21Q
YXJzaW5nLnNldChtX2dyYXBoLCBkYXRhLmluZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOwor
CisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2
YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhlbiBpdCdzIHByb2JhYmx5CisgICAgICAgIC8v
IGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBhbHJlYWR5IGludmFsaWRhdGVkLgorICAgICAg
ICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZh
bHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1
ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjAsNiArMjEzNiw4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVz
ZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9u
bHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAor
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcl07CisKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0
cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTIx
MjksMTggKzIxNDcsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6
Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRDYXNlLm1ldGhv
ZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3Rh
bnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAg
ICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisg
ICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0
aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAg
bV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAot
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0TWV0aG9kOjpMb2FkOiB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNldCwgdWlkLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1f
Z3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRpY3Rpb24pCkBAIC0yMTYzLDYgKzIxOTIsOCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVl
IGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBv
cmlnaW5hbFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEFic3RyYWN0
VmFsdWUgcmVzdWx0aW5nVmFsdWU7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewog
ICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwpAQCAtMjE3MCw2ICsyMjAxLDExIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIHRoaXNTZXQu
ZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAgaWYgKHRoaXNTZXQuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1
ZSA9IG9yaWdpbmFsVmFsdWU7CisgICAgICAgICAgICB0aGlzVmFsdWUuZmlsdGVyKG1fZ3JhcGgs
IHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOworICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVy
Z2UodGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHRoaXNTZXQub25seVN0cnVjdHVyZSgpICE9IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMuYXBwZW5kKApAQCAtMjE4NSw2ICsyMjIxLDkg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNl
cnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9
PSBDb250cmFkaWN0aW9uKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsK
KyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAg
ICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBt
X3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtMjI2NCwxMyArMjMwMywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0
OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9z
dHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNGaW5pdGUoKSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1
Y3R1cmUuc2V0KCksCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRC
eUlkRGlyZWN0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2lt
cGxlKCkpIHsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAg
ICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CkBAIC0yNjE1LDkgKzI2NTQsOSBA
QCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7
Ci0gICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAg
ICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJh
dGlvbk9LKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNW
YWxpZChmYWxzZSk7CiAgICAgcmV0dXJuIENvbnRyYWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRU
eXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0
cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShT
cGVjQm9vbGVhbik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3Ro
ZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgc2V0VHlwZShTcGVjSW50MzIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0
VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgc2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgbWVyZ2UoU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNP
YmplY3QpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9y
T3RoZXI6CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBo
JiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3Jp
cHRvcik7CisgICAgaWYgKGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZp
eFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRh
dGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3Vs
dERvdWJsZSkgewpAQCAtMTg5LDggKzIzOSwyMiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdl
T1NSRW50cnlWYWx1ZShHCiAgICAgcmV0dXJuIG9sZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCitib29sIEFic3RyYWN0VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlKSBjb25zdAogewor
ICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOworICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGlu
ZmVycmVkVHlwZSk7CisKKyAgICBBYnN0cmFjdFZhbHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7Cisg
ICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVlKTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1
ZSA9PSB0eXBlVmFsdWU7Cit9CisKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3Vs
YXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKK3sKKyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYg
U3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAoaXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmls
dHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcgKzI2Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJz
dHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAvLyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9k
ZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgIAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJv
bVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlwZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVy
LmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhl
cik7CiAgICAgCkBAIC0zMTUsNiArMzc5LDEzIEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyKGMKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0
ZXJWYWx1ZTsKKyAgICBmaWx0ZXJWYWx1ZS5zZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJl
dHVybiBmaWx0ZXIoZmlsdGVyVmFsdWUpOworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRl
clZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJl
IHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3Mu
aCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5j
bHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJE
dW1wQ29udGV4dC5oIgpAQCAtMjE0LDcgKzIxNSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYpOworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlw
ZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2Rl
KiA9IG51bGxwdHIpOwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwg
Tm9kZSopOwogICAgIApAQCAtMjgwLDE3ICsyODQsMjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgIHsKICAgICAgICAgcmV0dXJuICEobV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9
CisKKyAgICBib29sIGlzVHlwZShHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYpIGNvbnN0OworCisgICAgLy8gRmlsdGVycyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0
cnVjdHVyZSBzZXQuIElmIHRoZSBhZG1pdHRlZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQs
IHRoaXMKKyAgICAvLyBpbXBsaWNpdGx5IGZpbHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkg
dGhlIHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFyZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8g
U3BlY0NlbGwuIEhlbmNlLCBhZnRlciB0aGlzIGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdl
ciBoYXZlIGFueSBub24tY2VsbCBtZW1iZXJzLiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRt
aXR0ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21lIG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQn
cyB3cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2Vs
bC4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNl
dCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAg
RmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1
bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRp
b25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25S
ZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAg
ICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBjaGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKICAgICAKICAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0
OwotICAgIAorCiAgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsK
ICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDYsOSArMjA2LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlD
b25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlw
ZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0
aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxl
UHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVk
VHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9m
ZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5j
ZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQg
c3RydWN0dXJlIHNldC4gRG9lcyBub3QKICAgICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhl
IGNvbmRpdGlvbiwgYnV0IGl0IG1heSByZXR1cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJz
IGEgY29udHJhZGljdGlvbi4KQEAgLTIzMDcsNyArMjMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAg
Tm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpA
QCAtMjMxOCwxMyArMjMxOSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlP
ZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlk
ZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlw
ZSA9IGluZmVycmVkVHlwZTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3Jh
cGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2Us
IGJhc2UpOwogCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeU9mZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYg
aW5mZXJyZWRUeXBlLAorICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3Rv
cmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzUsNiArMjMzOSw3
IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdl
QWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAg
ICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXI7CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwogICAgIAog
ICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwg
cHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ5LDcgKzI0NTQsOCBA
QCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9kZSogYmFzZU5vZGUg
PSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90eXBlKCkpKTsKLSAg
ICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVu
dGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5vZGUsIGlkZW50aWZp
ZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3AsIG9wKTsKICAgICB9
CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAgLy8gV2lsbCBuZXZl
ciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTU1LDEzICsyNTYxLDEzIEBAIE5vZGUq
IEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0cnVjdHVyZUNoZWNr
ID0gdHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChKU09iamVjdCoga25v
d25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+KCkpIHsKICAgICAg
ICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVjay4gTm90ZSB0aGF0
IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAgICAgLy8gaWYg
dGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07Ci0gICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQoKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgbG9hZGluZyBmcm9t
IGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUgdGhlCiAgICAgICAg
ICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjI2LDkgKzI2MzIsMTgg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKICAgICAg
ICAgfQorCisgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7Cisg
ICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAgIGZvciAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7CisgICAgICAgICAgICAg
ICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHRoaXNUeXBlID0gbV9ncmFwaC5pbmZlcnJlZFR5
cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICAgICAgaW5mZXJyZWRU
eXBlLm1lcmdlKHRoaXNUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAgICAgICAgCiAgICAg
ICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICBsb2FkUHJl
ZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgbG9hZE9w
KTsKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YXJpYW50Lm9mZnNldCgpLCBpbmZlcnJlZFR5cGUsIGxvYWRPcCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIGxvYWRlZFZhbHVlOwpAQCAtMjYzOSw3ICsyNjU0LDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJlc2VuY2VMaWtlKGJh
c2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFudC5vZmZzZXQoKSwg
dmFyaWFudC5zdHJ1Y3R1cmUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2Us
IGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKKyAgICByZXR1cm4gaGFuZGxl
UHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFudC5y
ZXF1aXJlZFR5cGUoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKApAQCAtMjg1NCw2ICsyODY5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QnlJZCgKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPm9mZnNldCA9IHZhcmlhbnQub2Zm
c2V0KCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVy
OworICAgICAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSB2YXJpYW50LnJlcXVpcmVkVHlwZSgpOwog
ICAgICAgICAKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgIFB1dEJ5T2Zmc2V0LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBA
IGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIFBoYW50
b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9u
OgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIC8vIFRo
ZXNlIGRvIGNsb2JiZXIgbWVtb3J5LCBidXQgbm90aGluZyB0aGF0IGlzIG9ic2VydmFibGUuIEl0
IG1heSBiZSBuaWNlIHRvIHNlcGFyYXRlIHRoZQogICAgICAgICAvLyBoZWFwcyBpbnRvIHRob3Nl
IHRoYXQgYXJlIG9ic2VydmFibGUgYW5kIHRob3NlIHRoYXQgYXJlbid0LCBidXQgd2UgZG9uJ3Qg
ZG8gdGhhdCByaWdodCBub3cuCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luZmVycmVkVHlwZUNoZWNrLmgiCiAjaW5jbHVk
ZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJH
ZXRCeUlkU3RhdHVzLmgiCkBAIC0zNzMsNyArMzc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09
IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zm
c2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5yZXF1aXJlZFR5cGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0OCw2ICs0NTAsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2Up
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZh
bHVlIHZhbHVlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOwogCiAgICAg
ICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2gg
Q0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAg
ICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1
bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgpAQCAtNDYzLDcgKzQ2Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0
dXMuaXNTaW1wbGUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm51bVZhcmlhbnRzKCkpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+
IDEgJiYgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQpAQCAtNjQwLDcgKzY0Myw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxk
RWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9k
ZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCgKKyAgICAgICAgdW5zaWduZWQg
aW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBFZGdlIGNoaWxkRWRnZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wKQogICAg
IHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAg
CkBAIC02NTYsNiArNjYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEm
IGRhdGEgPSAqbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRh
Lm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRp
Zmllck51bWJlcjsKKyAgICAgICAgZGF0YS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CiAg
ICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0
eVN0b3JhZ2UpOwogICAgIH0KQEAgLTY2NCw4ICs2NzAsMTAgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNo
aWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwotICAgICAgICAKKwogICAgICAgICBhZGRCYXNlQ2hl
Y2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
OworICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LCBpbmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCB2YXJp
YW50LnJlcXVpcmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CkBAIC03MzAsNiArNzM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEFyaXNlcyB3
aGVuIHdlIHBydW5lIE11bHRpR2V0QnlPZmZzZXQuIFdlIGNvdWxkIGhhdmUgYQogICAgICAgICAg
ICAgLy8gTXVsdGlHZXRCeU9mZnNldCB3aXRoIGEgc2luZ2xlIHZhcmlhbnQgdGhhdCBjaGVja3Mg
Zm9yIHN0cnVjdHVyZSBTLAogICAgICAgICAgICAgLy8gYW5kIHRoZSBpbnB1dCBoYXMgc3RydWN0
dXJlcyBTIGFuZCBULCBmb3IgZXhhbXBsZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5vcmln
aW4sCiAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkp
LCBub2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbmZl
cnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3RhdGlv
biBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0byBo
YXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVjdCBo
YXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZEluZmVy
cmVkVHlwZSB7CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZlcnJl
ZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgZXhwZWN0ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZXhw
ZWN0ZWQoZXhwZWN0ZWQpCisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5cGUo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxw
dHIpCisgICAgICAgICwgbV9leHBlY3RlZChJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0
ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0
CisgICAgeworICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmpl
Y3QKKyAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0gSW5mZXJyZWRUeXBlOjpUb3A7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
V1RGOjpQdHJIYXNoPEluZmVycmVkVHlwZSo+OjpoYXNoKG1fb2JqZWN0KSArIG1fZXhwZWN0ZWQu
aGFzaCgpICogNzsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJp
bnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQsIGNvbnRleHQpLCAiIGZvciAiLCBSYXdQb2ludGVyKG1f
b2JqZWN0KSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CisgICAgfQorCitw
cml2YXRlOgorICAgIEluZmVycmVkVHlwZSogbV9vYmplY3Q7CisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Cit9OworCitzdHJ1Y3QgRGVzaXJlZEluZmVycmVkVHlwZUhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUm
IGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJy
ZWRUeXBlPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZUhhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsg
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDExIEBAIHZvaWQgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjoKICAgICB9CiB9CiAKK3ZvaWQgSW5mZXJyZWRUeXBl
QWRhcHRvcjo6YWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRU
eXBlJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAgICBrZXkuYWRkKGNvbW1vbi53YXRj
aHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJl
ZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2lu
dHMoKSB7IH0KIApAQCAtOTMsNiArOTgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFk
ZExhemlseShjb25zdAogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkp
OwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJ
bmZlcnJlZFR5cGUmIGtleSkKK3sKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtleSk7
Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEwOCw2
ICsxMTgsNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAg
bV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBt
X2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAg
IG1faW5mZXJyZWRUeXBlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAog
Ym9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTE2LDcg
KzEyNyw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICAg
ICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVk
VmFsdWVzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxs
VmFsaWQoKQotICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlk
KCk7CisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKQor
ICAgICAgICAmJiBtX2luZmVycmVkVHlwZXMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKQEAgLTEyNyw2ICsxMzksNyBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6ZHVtcEluQ29udGV4dChQCiAgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFs
dWVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOwogICAg
IG91dC5wcmludCgiICAgIEJ1ZmZlciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3Ms
IGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29u
ZGl0aW9uczogIiwgaW5Db250ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwg
IlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4dCht
X2luZmVycmVkVHlwZXMsIGNvbnRleHQpLCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0
YS5oIgorI2luY2x1ZGUgIkRGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJbmZl
cnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgpAQCAtOTEsNiArOTIsMTggQEAgc3RydWN0IEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0bwogICAgIH0KIH07CiAKK3N0cnVjdCBJbmZlcnJl
ZFR5cGVBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVu
SW52YWxpZGF0ZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFrZXkuaXNTdGlsbFZhbGlkKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYg
a2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNv
bnRleHQoa2V5LCBjb250ZXh0KSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgV2F0
Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRj
aHBvaW50U2V0VHlwZT4+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECkBAIC0xNTksNiArMTcyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBJdCdz
IHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBo
Ojp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1h
Z2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExhemls
eShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gSXQncyByZWNvbW1l
bmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5mZXJy
ZWRUeXBlRm9yKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMuCisg
ICAgdm9pZCBhZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAg
IGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCkBAIC0xODYsNiArMjAzLDEwIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dh
dGNoZWQoa2V5KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5pc1dh
dGNoZWQoa2V5KTsKKyAgICB9CiAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwpAQCAtMTk2LDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1
ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAgIEdlbmVy
aWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOworICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJyZWRUeXBl
QWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBcnJh
eVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCkBA
IC0xMDkyLDYgKzEwOTMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2so
CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG1faW5kZXhJbkJsb2NrLCBub2RlLT5v
cmlnaW4sIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAgICAgICAgICAgICBzcGVjdWxhdGVGb3JC
YXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2MSwxMiArMjYxLDE2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0g
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQi
LCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClb
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7CiAgICAgICAgIG91dC5w
cmludCgiLCAiLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNl
dCkpOworICAgICAgICBvdXQucHJpbnQoIiwgaW5mZXJyZWRUeXBlID0gIiwgaW5Db250ZXh0KHN0
b3JhZ2VBY2Nlc3NEYXRhLmluZmVycmVkVHlwZSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAo
bm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZp
ZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0KSk7CisgICAgICAg
ICAgICBpZiAoZGF0YS5jYXNlc1tpXS5tZXRob2QoKS5raW5kKCkgPT0gR2V0QnlPZmZzZXRNZXRo
b2Q6OkxvYWQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGluZmVycmVkIHZhbHVlID0g
IiwgaW5Db250ZXh0KGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShkYXRhLmNhc2VzW2ldLnNldCgp
LCBpZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0pLCBjb250ZXh0KSwgIikiKTsK
KyAgICAgICAgfQogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEo
KSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCk7CkBAIC04ODcsNiArODkxLDM5IEBAIGJvb2wgR3JhcGg6OmlzU2FmZVRv
TG9hZChKU09iamVjdCogYmFzZSwKICAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0
ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOwogfQogCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3IgR3JhcGg6OmluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkKK3sK
KyAgICBhc3NlcnRJc1JlZ2lzdGVyZWQoa2V5LnN0cnVjdHVyZSgpKTsKKyAgICAKKyAgICBhdXRv
IGl0ZXIgPSBtX2luZmVycmVkVHlwZXMuZmluZChrZXkpOworICAgIGlmIChpdGVyICE9IG1faW5m
ZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworCisgICAgSW5m
ZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3Io
a2V5LnVpZCgpKTsKKyAgICBpZiAoIXR5cGVPYmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5
cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVk
VHlwZTo6VG9wOworICAgIH0KKworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVz
Y3JpcHRvciA9IHR5cGVPYmplY3QtPmRlc2NyaXB0b3IoKTsKKyAgICBpZiAodHlwZURlc2NyaXB0
b3Iua2luZCgpID09IEluZmVycmVkVHlwZTo6VG9wKSB7CisgICAgICAgIG1faW5mZXJyZWRUeXBl
cy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5
cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIHR5cGVE
ZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodHlwZU9i
amVjdCk7CisgICAgaWYgKHR5cGVEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICByZWdp
c3RlclN0cnVjdHVyZSh0eXBlRGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisKKyAgICAvLyBOb3Rl
IHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhpcyBkZXNpcmVkIGluZmVycmVkIHR5
cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkKKyAgICAvLyBwb2ludCB0byB0aGUg
c2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExh
emlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3QsIHR5cGVEZXNjcmlwdG9yKSk7CisK
KyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBH
cmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxD
b2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0
b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0xMDYxLDcg
KzEwOTgsNyBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTCiBKU1Zh
bHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFzZSwgY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJl
ZCgpKSB7CisgICAgaWYgKHN0cnVjdHVyZS5pc0luZmluaXRlKCkpIHsKICAgICAgICAgLy8gRklY
TUU6IElmIHdlIGp1c3QgY29udmVydGVkIHRoZSBvZmZzZXQgdG8gYSB1aWQsIHdlIGNvdWxkIGRv
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uCiAgICAgICAgIC8vIHdhdGNoaW5nIHRvIGNvbnN0YW50
LWZvbGQgdGhlIHByb3BlcnR5LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3MjcxCkBAIC0xMDc2LDYgKzExMTMsMzcgQEAgSlNWYWx1ZSBHcmFw
aDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjbwogICAgIHJldHVybiB0cnlHZXRDb25zdGFudFBy
b3BlcnR5KGJhc2UubV92YWx1ZSwgYmFzZS5tX3N0cnVjdHVyZSwgb2Zmc2V0KTsKIH0KIAorQWJz
dHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IFN0
cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJl
clN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICBi
YXNlLmZvckVhY2goCisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXQoKnRoaXMs
IGluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgICAgICAgICBy
ZXN1bHQubWVyZ2UodmFsdWUpOworICAgICAgICB9KTsKKyAgICBpZiAoY2xvYmJlclN0YXRlID09
IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIHJlc3VsdC5jbG9iYmVyU3RydWN0dXJl
cygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVy
cmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgU3RydWN0dXJl
Q2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRy
eUdldENvbnN0YW50UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZh
bHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNs
b2JiZXJTdGF0ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJh
c2UubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eShiYXNlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQsIGNsb2JiZXJTdGF0ZSk7CisK
KyAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBo
Ojp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZz
ZXQpCiB7CiAgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2Vl
IGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJERkdQbGFuLmgi
CiAjaW5jbHVkZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgorI2luY2x1ZGUgIkRGR1Byb3BlcnR5
VHlwZUtleS5oIgogI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5oIgogI2luY2x1ZGUgIkZ1bGxCeXRl
Y29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgpAQCAtNjc1LDYgKzY3NiwyMSBA
QCBwdWJsaWM6CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20g
dGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAg
ICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGgg
d2F0Y2hDb25kaXRpb24oKS4KICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwg
UHJvcGVydHlPZmZzZXQpOworCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBlIHdl
IGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhlIGZ1
dHVyZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNvbnN0
IFByb3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJl
ZFR5cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlUeXBl
S2V5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJl
ZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJlc0Fy
ZVdhdGNoZWQpOworCisgICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0eSBp
bmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBhYnN0
cmFjdAorICAgIC8vIHZhbHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhlIGdp
dmVuIGFic3RyYWN0IHZhbHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZhbHVl
Rm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwog
ICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sqKTsK
ICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1lKik7
CkBAIC04NTYsNiArODcyLDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwog
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+PiBt
X2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9wZXJ0
eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtleSwgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9taW5hdG9ycyBt
X2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7CiAg
ICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0luZmVy
cmVkVHlwZUNoZWNrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGluc2Vy
dEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1bnNp
Z25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwKKyAgICBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
LmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgb3Jp
Z2luKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46
CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENo
ZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEJvb2xlYW5Vc2UpKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VO
b2RlLCBPdGhlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6SW50MzI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3Bl
Y05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEludDMyVXNlKSk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVk
Z2UoYmFzZU5vZGUsIE51bWJlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2Rl
SW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBTdHJpbmdVc2Up
KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAg
IE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1
cmUoKSkpLAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5m
byhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkp
LAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2UpKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRn
ZShiYXNlTm9kZSwgT2JqZWN0VXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBPYmpl
Y3RPck90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0goaW5zZXJ0aW9u
U2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlw
ZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJyZWRUeXBlQ2hl
Y2tfaAorI2RlZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlw
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEluc2VydHMgYSB0
eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2ZW4gaW5mZXJy
ZWQgdHlwZS4KK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0aW9uU2V0
JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5mZXJyZWRUeXBl
Q2hlY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0IFN0b3Jh
Z2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUgaW5mZXJy
ZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVlZCB0byBy
ZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhpcyBpcyBu
ZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlwZSBpcwor
ICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVk
VHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMzUsMTQgKzIxMzUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmb3Ig
KFN0cnVjdHVyZSogc3RydWN0dXJlIDogc3RydWN0dXJlcykgewogICAgICAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OwogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGN1cnJlbnRPZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb3VyIGFuYWx5c2lzIHRyZWF0cyBNdWx0
aVB1dEJ5T2Zmc2V0IGxpa2UgYW4gZXNjYXBlLCB3ZSBvbmx5IGhhdmUgdG8KKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGRlYWwgd2l0aCBzdG9yaW5nIHJlc3VsdHMgdGhhdCB3b3VsZCBoYXZl
IGJlZW4gcHJldmlvdXNseSBzdG9yZWQgYnkgUHV0QnlPZmZzZXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFwcHJvcHJp
YXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5jb21pbmcg
dmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Ig
d2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwg
Y3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1
cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50
cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1
cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNkZWZpbmUg
REZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmluZGluZyBh
IHByb3BlcnR5J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVuaXF1ZWRT
dHJpbmdJbXBsKi4KKworY2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAgICBQcm9w
ZXJ0eVR5cGVLZXkoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwg
bV91aWQobnVsbHB0cikKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IG1fc3Ry
dWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAgIH0KKwor
ICAgIFByb3BlcnR5VHlwZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAg
ICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVkVUlEKCkp
CisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBtX3N0cnVjdHVyZSAmJiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdWlkID09IG90
aGVyLm1fdWlkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9wZXJ0eVR5
cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgKyBXVEY6
OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCk7CisgICAgfQorCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIW1fc3RydWN0dXJlICYmIG1fdWlkID09IGRlbGV0ZWRVSUQoKTsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQp
IGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQobV9z
dHJ1Y3R1cmUsIGNvbnRleHQpLCAiKyIsIG1fdWlkKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBkZWxldGVkVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VW5p
cXVlZFN0cmluZ0ltcGwqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0KKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3Vp
ZDsKK307CisKK3N0cnVjdCBQcm9wZXJ0eVR5cGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsg
fQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYSwgY29uc3Qg
UHJvcGVydHlUeXBlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6UHJvcGVy
dHlUeXBlS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0
eVR5cGVLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVL
ZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHUHJvcGVydHlUeXBlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAg
ICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2Fz
ZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIGNhc2Ug
RnVuY3Rpb25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CkBAIC0xMjcsNiArMTI4
LDkgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGlmICgh
c2FmZVRvRXhlY3V0ZUVkZ2UucmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IC8vIE5PVEU6IFRoaXMgdGVuZHMgdG8gbGllIHdoZW4gaXQgY29tZXMgdG8gZWZmZWN0ZnVsIG5v
ZGVzLCBiZWNhdXNlIGl0IGtub3dzIHRoYXQgdGhleSBhcmVuJ3QgZ29pbmcgdG8KKyAgICAvLyBn
ZXQgaG9pc3RlZCBhbnl3YXkuCisKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNl
IEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5OCwzNiArMzg5OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobm9kZS0+
c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
LSAgICAgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFz
ZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKLSAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1
cmUuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAgICAgICAg
ZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVj
dHVyZS5ncHIoKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNoZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoV2Vha1B0cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0
cnVjdHVyZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxMSwzOCArMzkxMSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobm9kZS0+
c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIEV4aXRLaW5kIGV4aXRL
aW5kOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCi0gICAgICAg
ICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+c3Ry
dWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUo
Ci0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClb
MF0pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKLSAgICAgICAgICAgICAgICBk
b25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKEpJVENvbXBpbGVyOjpFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBleGl0S2luZCwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1
cmUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMzIsNiArNTIzMiw4MCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVHlwZU9mKE5vZGUqCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSog
bm9kZSwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIEFTU0VSVChub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOworICAgIAorICAgIGlmIChub2RlLT5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAg
ICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAwLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
Y2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBu
b2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxHUFJUZW1wb3Jhcnk+IHN0cnVjdHVyZTsKKyAgICAgICAgR1BSUmVnIHN0cnVjdHVy
ZUdQUjsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZW1wR1BSID09IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgICAgIHN0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8R1BSVGVtcG9yYXJ5Pih0
aGlzKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS0+Z3ByKCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gdGVtcEdQUjsKKyAgICAgICAg
CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkgewor
ICAgICAgICAgICAgZG9uZS5hcHBlbmQoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vh
a1N0cnVjdHVyZShKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+c3RydWN0
dXJlU2V0KClbaV0pKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChj
ZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0
cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmUoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkg
eworICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxs
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5v
ZGUsIGNlbGwuZ3ByKCksIEludmFsaWRHUFJSZWcpOworICAgICAgICBub1Jlc3VsdChub2RlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworCisg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAg
ICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBjZWxsID0gbV9qaXQuYnJhbmNoSWZDZWxsKHZhbHVlUmVncyk7CisgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgdmFsdWVSZWdzLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Nl
bGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKHZhbHVl
UmVncywgdGVtcEdQUikpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworICAgICAgICBjZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgY29tcGlsZUNoZWNr
U3RydWN0dXJlKG5vZGUsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHRlbXBHUFIpOworICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRI
YXZlSW5kZXhpbmdIZWFkZXIoKSkgewpAQCAtNTYzNiw2ICs1NzEwLDIyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRnZSAKICAgICAoU3BlY3VsYXRlQ2VsbE9wZXJhbmQo
dGhpcywgZWRnZSkpLmdwcigpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVD
ZWxsT3JPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVl
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb2sgPSBtX2ppdC5icmFuY2hJZkNlbGwo
b3BlcmFuZC5qc1ZhbHVlUmVncygpKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgb3Bl
cmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAg
bV9qaXQuYnJhbmNoSWZOb3RPdGhlcihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsK
KyAgICBvay5saW5rKCZtX2ppdCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZU9iamVjdChFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVj
T2JqZWN0KSkKQEAgLTU5MTYsNiArNjAwNiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgIHNwZWN1bGF0ZUNlbGwo
ZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAg
IHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE9i
amVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UpOwogICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxNSw2ICsyMjE1LDggQEAgcHVibGljOgog
ICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJ
c0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUeXBlT2YoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRl
bXBHUFIpOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqKTsKICAgICAKICAg
ICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsKICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7
CkBAIC0yMzc0LDYgKzIzNzYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVS
ZXBSZWFsKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdl
KTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZ1
bmN0aW9uKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlRmluYWxPYmplY3QoRWRnZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxNCw3ICszMTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4g
dGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcldpdGhJbnZh
bGlkRXhpdChtX25vZGVJbmRleCArIDEsIEVkZ2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtu
b3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgg
KyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKICAgICAg
ICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDgxLDExICs0ODEsNiBAQCBwcml2YXRlOgogICAg
ICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKICAgICB9CiAKLSAgICB2b2lk
IGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4aXQodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJh
c2UpCi0gICAgewotICAgICAgICBpbnNlcnRCYXJyaWVyKG5vZGVJbmRleCwgYmFzZSwgZmFsc2Up
OwotICAgIH0KLQogICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVk
Z2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVlKQogICAgIHsKICAgICAgICAgLy8gSWYgd2UncmUg
aW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3
ZSBoYXZlIGNvbnZlcmdlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
U3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQot
ICAgIAorCiAgICAgLy8gSW4gbW9zdCBjYXNlcywgd2hhdCB5b3UgcmVhbGx5IHdhbnQgdG8gZG8g
aXMgdmVyaWZ5IHdoZXRoZXIgdGhlIHNldCBpcyB0b3Agb3IgY2xvYmJlcmVkLCBhbmQKICAgICAv
LyBpZiBub3QsIGVudW1lcmF0ZSB0aGUgc2V0IG9mIHN0cnVjdHVyZXMuIFVzZSB0aGlzIG9ubHkg
aW4gY2FzZXMgd2hlcmUgdGhlIHNpbmdsZXRvbiBjYXNlIGlzCiAgICAgLy8gbWVhbmluZ2Z1bGx5
IHNwZWNpYWwsIGxpa2UgZm9yIHRyYW5zaXRpb25zLgpAQCAtMjAyLDYgKzIwMiwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIG1fc2V0Lm9u
bHlTdHJ1Y3R1cmUoKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgbV9zZXQuZm9yRWFjaChmdW5jdG9yKTsK
KyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzksNiArNzksOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgVXNlCiAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIG91dC5wcmludCgiS25vd25D
ZWxsIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAg
ICBvdXQucHJpbnQoIkNlbGxPck90aGVyIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9i
amVjdFVzZToKICAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4OTgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw2ICs1MSw3IEBAIGVudW0gVXNlS2luZCB7CiAgICAgS25vd25Cb29sZWFuVXNl
LAogICAgIENlbGxVc2UsCiAgICAgS25vd25DZWxsVXNlLAorICAgIENlbGxPck90aGVyVXNlLAog
ICAgIE9iamVjdFVzZSwKICAgICBGdW5jdGlvblVzZSwKICAgICBGaW5hbE9iamVjdFVzZSwKQEAg
LTEwOCw2ICsxMDksOCBAQCBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VL
CiAgICAgY2FzZSBDZWxsVXNlOgogICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICByZXR1
cm4gU3BlY0NlbGw7CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNw
ZWNDZWxsIHwgU3BlY090aGVyOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4g
U3BlY09iamVjdDsKICAgICBjYXNlIEZ1bmN0aW9uVXNlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMs
NiArMjYzLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICEhbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+ZGZnU2hvdWxk
V2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTg5ODEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTgsNiArNDE4LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3Jh
cGgmIGdyYXBoKQogICAgICAgICAgICAgICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAg
ICAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEtub3duQ2VsbFVz
ZToKKyAgICAgICAgICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAgICAgICAgICAg
IGNhc2UgT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAg
ICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4OTgxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDI2LDIxICsyMDI2LDU2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKICAgICAgICAgRXhpdEtpbmQgZXhp
dEtpbmQ7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAg
ICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25zdGFudENhY2hlOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0
cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KTsKLSAgICAgICAgCi0gICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAgICAgICAgICAgc3RydWN0
dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0
KCksCi0gICAgICAgICAgICBbdGhpc10gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1
cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0
cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5k
LCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJ
RChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY2VsbCBjYXNl
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIG5vdCBjZWxsIGNhc2UiKSk7
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNvbnRpbnVhdGlvbiIpKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICBjaGVja1N0cnVj
dHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICBleGl0
S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVj
dHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0
dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2Vs
bENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNO
b3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hl
Y2tDZWxsKCkKQEAgLTQwMjIsNiArNDA1Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9j
a3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworCisgICAgICAgICAgICBjaGVja0luZmVy
cmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CkBAIC01Njc0
LDYgKzU3MTEsMTM1IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBy
ZXN1bHRzKTsKICAgICB9CisKKyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2UgZWRnZSwg
TFZhbHVlIHZhbHVlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAg
eworICAgICAgICAvLyBUaGlzIGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlwZUNoZWNr
KCkgYmVjYXVzZSBpdCBpcyBjYWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlrZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAgICAgICAv
LworICAgICAgICAvLyBtYXkgYmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNhc2UgNDI6
CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7CisgICAg
ICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
ICAgICBjYXNlIDQzOgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwg
dHlwZTIpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFr
OworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0eXBlMSBh
bmQgdHlwZTIgYXJlIGRpZmZlcmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVhbiB0aGF0
IHRoZSBlZGdlIHdvdWxkIGJlCisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYgdHlwZTIs
IGluc3RlYWQgb2YgdHlwZTEgfCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodHlw
ZS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
bV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T3RoZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
SW50MzI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZS5ub2RlKCksIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLCBpc05vdE51bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdFN0cmlu
Zyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIGlmICghYWJzdHJh
Y3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0
cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRU
eXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNo
ZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RD
ZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSkpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5u
b3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0
cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYg
flNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogewor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2VsbCBjYXNlIikpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNr
SW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJ
bmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAg
IG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY2Vs
bENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworCisgICAg
ICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RPYmplY3QodmFsdWUs
IHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNl
LCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAg
ICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAg
ICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5TcGVjQ2VsbCkpOwor
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KICAgICAKICAgICBMVmFsdWUgbG9hZFBy
b3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNzUxNCw2ICs3NjgwLDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIu
bmVlZHNUeXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTk0LDYgKzc3
NjMsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90
aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpc05vdENl
bGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
Tm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNw
ZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2ludGVy
cHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpAQCAtODEyNyw2ICs4MzEyLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmIChmYWlsQ29uZGl0aW9u
ID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBB
U1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmZp
bmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KApAQCAtODEzNSw5ICs4MzIzLDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFy
Z3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBl
bmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAgCisKICAgICAgICAgT1NSRXhp
dCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CiAKKyAgICAgICAg
aWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKKyAgICAgICAgICAgIGVt
aXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKwogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7CiAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3MCBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5v
dFR5cGUoCisgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBc3NlbWJseUhlbHBlcnM6
Okp1bXBMaXN0IHJlc3VsdDsKKworICAgIHN3aXRjaCAoZGVzY3JpcHRvci5raW5kKCkpIHsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICByZXN1bHQuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RCb29sZWFuKHJlZ3MsIHRlbXBHUFIpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPdGhlcihyZWdzLCB0ZW1wR1BSKSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICByZXN1bHQu
YXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVncykpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3ROdW1iZXIocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdzLnBh
eWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFs
LCByZWdzLnBheWxvYWRHUFIoKSwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1
bHQuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIGRl
c2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncykpOworICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsKKyAgICAgICAgSnVt
cCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdChyZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6cHVyaWZ5TmFOKEZQUlJlZyBmcHIpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90TmFOID0gYnJhbmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcHIsIGZwcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxOSw2ICs3MTksOCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5cGUoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVn
IHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzc3LDcgKzM3Nyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQKICAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRTdG9yYWdlID0g
b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAg
ICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQo
b2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAm
JiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewogCiAgICAgICAg
ICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgICAgICAgICAgICAgICAgICBjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMyw2ICs2MzMsOCBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgIHBjWzVdLnUucG9pbnRlciA9IG51bGxw
dHI7IC8vIG9mZnNldAogICAgICAgICBwY1s2XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBuZXcg
c3RydWN0dXJlCiAgICAgICAgIHBjWzddLnUucG9pbnRlciA9IG51bGxwdHI7IC8vIHN0cnVjdHVy
ZSBjaGFpbgorICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KHBjWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZFBlcnNp
c3RlbnRGbGFnc01hc2spOwogICAgICAgICAKICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2Vs
bC0+c3RydWN0dXJlKCk7CkBAIC02NjAsMTIgKzY2MiwxOCBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNbN10u
dS5zdHJ1Y3R1cmVDaGFpbi5zZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGNbOF0udS5wdXRCeUlkRmxhZ3MgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcihpZGVudC5pbXBsKCkpLnB1dEJ5SWRGbGFn
cygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5
UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIHBj
WzRdLnUuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgICAgICAgICAgICAgcGNb
NV0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBwY1s4
XS51LnB1dEJ5SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAg
ICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZs
YWdzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY1LDE0ICsxMjY1LDg3IEBA
IF9sbGludF9vcF9wdXRfYnlfaWQ6CiAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcygxLCAzKQog
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlQ2VsbCh0MywgdDAsIC5vcFB1dEJ5SWRTbG93KQotICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1
Y3R1cmVJRFt0MF0sIHQyCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDQsIHQxKQotICAgIGJp
bmVxIHQyLCB0MSwgLm9wUHV0QnlJZFNsb3cKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwg
dDIpCisgICAgYmluZXEgdDIsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIC5vcFB1dEJ5SWRT
bG93CiAKICAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6Ci0gICAgIyB0MSwgdDIgLT4gY3Vy
cmVudCBzdHJ1Y3R1cmUgSUQKKyAgICAjIHQyIC0+IGN1cnJlbnQgc3RydWN0dXJlIElECiAgICAg
IyB0MCAtPiBvYmplY3QgYmFzZQogCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQxKQor
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQzKQorCisgICAgbG9hZHBGcm9tSW5zdHJ1
Y3Rpb24oOCwgdDEpCisKKyAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6CisgICAgIyB0MCAt
PiBvYmplY3QgYmFzZQorICAgICMgdDEgLT4gcHV0IGJ5IGlkIGZsYWdzCisgICAgIyB0MiAtPiBj
dXJyZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDMgLT4gdmFsdWUgdG8gcHV0CisKKyAgICBidHBu
eiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyCisKKyAgICAjIFdlIGhhdmUgb25lIG9mIHRoZSBub24tc3RydWN0
dXJlIHR5cGUgY2hlY2tzLiBGaW5kIG91dCB3aGljaCBvbmUuCisgICAgYW5kcCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZU1hc2ssIHQxCisgICAgYnBsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJp
bmcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZworCisgICAgIyBXZSBhcmUgb25l
IG9mIHRoZSBmb2xsb3dpbmc6IFN0cmluZywgT2JqZWN0LCBPYmplY3RPck90aGVyLCBUb3AKKyAg
ICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIsIC5vcFB1dEJ5SWRU
eXBlQ2hlY2tMZXNzVGhhbk9iamVjdE9yT3RoZXIKKworICAgICMgV2UgYXJlIGVpdGhlciBPYmpl
Y3RPck90aGVyIG9yIFRvcC4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCwg
Lm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisKKyAgICAjIENoZWNrIGlmIHdlIGFyZSBPYmpl
Y3RPck90aGVyLgorICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmpl
Y3QKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcjoKKyAgICBhbmRxIH5UYWdCaXRVbmRlZmluZWQs
IHQzCisgICAgYnFlcSB0MywgVmFsdWVOdWxsLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMK
KyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2Jq
ZWN0T3JPdGhlcjoKKyAgICAjIFdlIGFyZSBlaXRoZXIgU3RyaW5nIG9yIE9iamVjdC4KKyAgICBi
dHFueiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFNsb3cKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorICAgIGJiZXEgSlND
ZWxsOjptX3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMK
KyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3Q6CisgICAg
YmJhZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNr
aW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xl
c3NUaGFuU3RyaW5nOgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20s
IEJvb2xlYW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyCisgICAgYnBsdCB0MSwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVJbnQzMiwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzIKKworICAgICMg
V2UgYXJlIGVpdGhlciBJbnQzMiBvciBOdW1iZXIuCisgICAgYnBlcSB0MSwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVOdW1iZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXIKKworICAgIGJxYWVxIHQz
LCB0YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9w
UHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcjoKKyAgICBidHFueiB0Mywg
dGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1
dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbkludDMyOgorICAgICMgV2Ug
YXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyLgorICAgIGJw
bmVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4sIC5vcFB1dEJ5SWRUeXBlQ2hlY2tC
b3R0b21Pck90aGVyCisgICAgeG9ycSBWYWx1ZUZhbHNlLCB0MworICAgIGJ0cXogdDMsIH4xLCAu
b3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9w
UHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXI6CisgICAgYnBlcSB0MSwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCisgICAgam1wIC5vcFB1dEJ5
SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
KyAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSwgLm9w
UHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmUKKyAgICBidHFueiB0MywgdGFnTWFz
aywgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RX
aXRoU3RydWN0dXJlOgorICAgIHVyc2hpZnRwIDMsIHQxCisgICAgYmluZXEgdDEsIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVJRFt0M10sIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlczoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAgCiAgICAgYnRp
eiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE4OTgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCwyMiBAQCBlbHNlCiAgICAgY29uc3QgTG93
ZXN0VGFnID0gRGVsZXRlZFZhbHVlVGFnCiBlbmQKIAorIyBOT1RFOiBUaGUgdmFsdWVzIGJlbG93
IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gUHV0QnlJZEZsYWdzLmguCitjb25zdCBQ
dXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gMHg2Citjb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVTZWNv
bmRhcnkgPSAweDAKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmUg
PSAweDIKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
ID0gMHg0Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sgPSAtMHg4Citjb25zdCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSA9IDB4MAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVC
b29sZWFuID0gMHg4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyID0gMHgxMAorY29u
c3QgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiA9IDB4MTgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlTnVtYmVyID0gMHgyMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcgPSAw
eDI4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCA9IDB4MzAKK2NvbnN0IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9IDB4MzgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlVG9wID0gMHg0MAorCiBjb25zdCBDYWxsT3BDb2RlU2l6ZSA9IDkKIAogaWYgWDg2XzY0
IG9yIEFSTTY0IG9yIENfTE9PUApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUy
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJy
ZWRUeXBlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEluZmVycmVkVHlwZSkgfTsKKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGU6OmNyZWF0
ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUodm0pOworICAg
IHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5
cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworICAg
IGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Cit9CisKK1N0cnVj
dHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIElu
ZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOwor
CisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3IuYWRk
VW5jb25kaXRpb25hbEZpbmFsaXplcigmaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZS0+bV9maW5h
bGl6ZXIpOworfQorCitJbmZlcnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxh
Z3MoUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJp
bWFyeVR5cGVNYXNrKSB7CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6Cisg
ICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAg
ICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbToKKyAgICAgICAgICAgIHJldHVybiBC
b3R0b207CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuOgorICAgICAg
ICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVP
dGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vj
b25kYXJ5VHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNl
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIE51bWJlcjsK
KyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmc7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90aGVyOworICAg
ICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wOgorICAgICAgICAgICAgcmV0dXJuIFRv
cDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOworICAgICAgICB9CisgICAgY2FzZSBQ
dXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXR1cm4gT2Jq
ZWN0V2l0aFN0cnVjdHVyZTsKKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIE90aGVyOwor
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBpZiAo
dmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICBpZiAodmFsdWUu
aXNDZWxsKCkpIHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAg
ICAgIGlmIChjZWxsLT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAg
ICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1
Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBUb3A7Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZsYWdzKQorewor
ICAgIEtpbmQga2luZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmU7CisgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgc3RydWN0dXJlID0g
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSk7
CisgICAgZWxzZQorICAgICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIHJldHVybiBEZXNj
cmlwdG9yKGtpbmQsIHN0cnVjdHVyZSk7Cit9CisKK1B1dEJ5SWRGbGFncyBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3I6OnB1dEJ5SWRGbGFncygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVC
b3R0b20pOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1
dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFy
eVR5cGVCb29sZWFuKTsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZU90aGVyKTsKKyAgICBjYXNlIEludDMyOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUludDMyKTsKKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0
QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIpOworICAgIGNhc2UgU3RyaW5nOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkg
fCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyk7CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29u
ZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0KTsKKyAgICBjYXNlIE9iamVjdE9yT3Ro
ZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmlt
YXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcik7Cisg
ICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wKTsKKyAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
dXRCeUlkRmxhZ3M+KAorICAgICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0
cnVjdHVyZSB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKSk7CisgICAgY2Fz
ZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKSk7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFB1
dEJ5SWROb25lOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6bWVyZ2UoY29u
c3QgRGVzY3JpcHRvciYgb3RoZXIpCit7CisgICAgLy8gRmlsdGVyIG91dCBjb21tb24gdGhpbmdz
IHRvIHNpbXBsaWZ5IHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlbG93LgorICAgIGlmICgqdGhpcyA9
PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvdGhlci5tX2tpbmQgPT0gQm90dG9t
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90
dG9tOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBC
b29sZWFuOgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7
CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gRGVzY3JpcHRvcihPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlciwgb3RoZXIuc3RydWN0dXJlKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVy
OgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIEludDMyOgorICAgICAgICBzd2l0Y2ggKG90
aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgICp0aGlzID0g
TnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNl
IE51bWJlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJ
bnQzMjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRo
ZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KKyAgICAgICAgY2Fz
ZSBPYmplY3Q6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAg
IGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAg
ICp0aGlzID0gb3RoZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9y
T3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAg
ICAgICBtX2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICp0aGlzID0g
T2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6
CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IC8vIElmIHdlIHNlZSB0
aGlzIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4K
KyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RP
ck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdDoKKyAgICAg
ICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIGNhc2UgT3Ro
ZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAg
c3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNl
IE9iamVjdDoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBPYmplY3Q7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAg
ICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvcjo6c3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgRGVz
Y3JpcHRvciBtZXJnZWQgPSAqdGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOworICAgIHJl
dHVybiAqdGhpcyA9PSBtZXJnZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAg
ICAgICAgb3V0LnByaW50KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwor
fQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworSW5mZXJy
ZWRUeXBlOjpJbmZlcnJlZFR5cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRU
eXBlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2lu
dCkKK3sKK30KKworSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJ
bmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
Y29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVkLmtpbmQoKSA9
PSBUb3ApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRv
cihsb2NrZXIpID09IGV4cGVjdGVkOworfQorCitib29sIEluZmVycmVkVHlwZTo6Y2FuV2F0Y2go
Y29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gY2FuV2F0Y2gobG9ja2VyLCBleHBlY3RlZCk7Cit9
CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7CisKKyAgICBtX3dhdGNocG9p
bnRTZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hw
b2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdhdGNocG9pbnQpOwor
fQorCit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIGRlc2NyaXB0b3IoKSk7Cit9CisK
K2Jvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgRGVz
Y3JpcHRvciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3JpcHRvciBvdGhl
clR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5cGUubWVyZ2Uo
b3RoZXJUeXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0gbXlUeXBlKTsg
Ly8gVGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4K
KworICAgIHNldChsb2NrZXIsIHZtLCBteVR5cGUpOworCisgICAgcmV0dXJuIGtpbmQobG9ja2Vy
KSAhPSBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0pCit7
CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2Vy
LCB2bSwgVG9wKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnNldChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQorewor
ICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBs
b2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAorICAgIC8v
IGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90
ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5
YmUgdGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVyR0NGb3JB
V2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdl
J3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBk
byBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3Ip
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1v
cmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rlc2NyaXB0
b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUgbmV3IGRl
c2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUg
YmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVy
ZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCghZGVzY3Jp
cHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsK
KworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYg
YW55b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCisgICAg
Ly8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQg
d2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dhdGNocG9p
bnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90
IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVh
ZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0g
SXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZl
IHRoaW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhp
cyB0eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0
IHRoaXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5n
cyBmb3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAg
ICAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoIkluZmVycmVkIHR5cGUgY2hhbmdlZCIpOwor
ICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUgb2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBp
ZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJl
KCkpCisgICAgICAgIG1fc3RydWN0dXJlID0gbnVsbHB0cjsKKworICAgIC8vIEFkZCBhIG5ldyBJ
bmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2UgbmVlZCBvbmUgbm93LgorICAgIGlmIChuZXdE
ZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVlIG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBo
ZXJlLgorICAgICAgICAgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9z
dHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
c3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxJbmZlcnJlZFN0cnVjdHVyZT4odm0sIHRoaXMs
IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3RGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoJm1fc3RydWN0dXJlLT5tX3dhdGNo
cG9pbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNj
cmlwdG9yIGtpbmQuCisgICAgbV9raW5kID0gbmV3RGVzY3JpcHRvci5raW5kKCk7CisKKyAgICAv
LyBBc3NlcnQgdGhhdCB3ZSBkaWQgdGhpbmdzLgorICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tl
cikgPT0gbmV3RGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1
Y3R1cmUoKQoreworICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKHRoaXMpLT52bSgpOworCisgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlwdG9y
IG5ld0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRvci5y
ZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgbmV3RGVzY3JpcHRv
cik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6
OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikKK3sKKyAgICBJbmZlcnJlZFN0cnVjdHVy
ZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1
Y3R1cmUqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1Rf
T0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fd2F0Y2hwb2ludCkpOworCisgICAgaW5mZXJy
ZWRTdHJ1Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlRmluYWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpCit7CisgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KKyAg
ICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCisgICAgICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJl
LCBtX2ZpbmFsaXplcikpOworCisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGluZmVycmVkU3Ry
dWN0dXJlLT5tX3BhcmVudCkpOworICAgIAorICAgIGlmICghSGVhcDo6aXNNYXJrZWQoaW5mZXJy
ZWRTdHJ1Y3R1cmUtPm1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAgaW5mZXJyZWRTdHJ1Y3R1
cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUoKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZl
cnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUoVk0mIHZtLCBJbmZlcnJlZFR5cGUqIHBh
cmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAg
LCBtX3N0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1Y3R1cmUpCit7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEluZmVycmVkVHlwZTo6S2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206
CisgICAgICAgIG91dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIG91
dC5wcmludCgiT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAg
ICAgIG91dC5wcmludCgiU3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RX
aXRoU3RydWN0dXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnBy
aW50KCJPYmplY3RPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6VG9wOgorICAgICAgICBvdXQucHJpbnQoIlRvcCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmZlcnJlZFR5
cGVfaAorI2RlZmluZSBJbmZlcnJlZFR5cGVfaAorCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExv
Y2suaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKKyNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFu
IG9iamVjdCB1c2VkIGZvciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBvYmplY3QgcHJv
cGVydGllcy4KKworY2xhc3MgSW5mZXJyZWRUeXBlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5
cGUqIGNyZWF0ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAg
IERFQ0xBUkVfSU5GTzsKKworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBCb3R0
b20sCisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIE90aGVyLAorICAgICAgICBJbnQzMiwKKyAg
ICAgICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1
cmUsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLAorICAgICAgICBPYmplY3Qs
CisgICAgICAgIE9iamVjdE9yT3RoZXIsCisgICAgICAgIFRvcAorICAgIH07CisKKyAgICBzdGF0
aWMgS2luZCBraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzKTsKKyAgICAKKyAgICBzdGF0aWMgYm9v
bCBoYXNTdHJ1Y3R1cmUoS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7
CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2xhc3MgRGVzY3JpcHRvciB7CisgICAgcHVibGljOgorICAgICAgICBEZXNjcmlwdG9yKCkK
KyAgICAgICAgICAgIDogbV9raW5kKEJvdHRvbSkKKyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUo
bnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRGVzY3JpcHRvcihLaW5k
IGtpbmQsIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogbV9r
aW5kKGtpbmQpCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBEZXNjcmlwdG9y
IGZvclZhbHVlKEpTVmFsdWUpOworCisgICAgICAgIHN0YXRpYyBEZXNjcmlwdG9yIGZvckZsYWdz
KFZNJiwgUHV0QnlJZEZsYWdzKTsKKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBCb3R0b20gJiYg
IW1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdz
KCkgY29uc3Q7CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFsdWUoSlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICAgICAgICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNC
b29sZWFuKCk7CisgICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAgY2FzZSBO
dW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7CisgICAgICAg
ICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmco
KTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09
IG1fc3RydWN0dXJlOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQorICAg
ICAgICAgICAgICAgICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpID09IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBP
YmplY3RPck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpIHx8IHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIFRvcDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICAgICAmJiBt
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBX
VEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBtZXJnZShj
b25zdCBEZXNjcmlwdG9yJik7CisgICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAg
ICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwg
dGhhbiB0aGUgb3RoZXIgb25lLgorICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0
b3ImKSBjb25zdDsKKworICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5kOworICAgICAgICBTdHJ1Y3R1
cmUqIG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFp
blRocmVhZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQs
IG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAg
fQorICAgIAorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgp
OworICAgIH0KKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRl
c2NyaXB0b3IobG9ja2VyKTsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIp
LmtpbmQoKTsgfQorCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBU
b3A7IH0KKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gVG9w
OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBpcyBzdGlsbCBy
ZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0J3MgVG9wLgor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNjcmlwdG9yID0gZGVzY3Jp
cHRvck1haW5UaHJlYWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNjcmlwdG9yLmluY2x1ZGVz
VmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREZXNjcmlwdG9yLmtpbmQo
KSAhPSBUb3A7CisgICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHZhbHVlKTsK
KyAgICB9CisKKyAgICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5cGUgaXJyZWxldmFudC4K
KyAgICB2b2lkIG1ha2VUb3AoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1ha2VUb3BTbG93KHZtKTsKKyAgICB9CisKKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRo
aXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3IuIE5vdGUgdGhhdAorICAgIC8vIHRo
aXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3AuCisgICAgYm9vbCBjYW5XYXRjaChj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImKTsKKyAg
ICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAKKyAgICB2b2lkIGFkZFdh
dGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50Kik7
CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZShWTSYpOwor
ICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAgIGJvb2wgd2lsbFN0b3JlVmFsdWVTbG93KFZNJiwg
SlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYpOworICAgIHZvaWQgc2V0KGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIERlc2NyaXB0b3IpOworICAgIHZvaWQgcmVtb3Zl
U3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAg
ICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1
Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAg
fTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyIDogcHVibGljIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1
cmVGaW5hbGl6ZXIoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAgY2xhc3MgSW5mZXJyZWRT
dHJ1Y3R1cmUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlKFZNJiwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0
cnVjdHVyZSopOworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH07CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQg
Y2xhc3MgSW5mZXJyZWRUeXBlOworICAgICAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1
cmVXYXRjaHBvaW50OworICAgICAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5h
bGl6ZXI7CisgICAgICAgIAorICAgICAgICBJbmZlcnJlZFR5cGUqIG1fcGFyZW50OworICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKworICAgICAgICBJbmZlcnJl
ZFN0cnVjdHVyZVdhdGNocG9pbnQgbV93YXRjaHBvaW50OworICAgICAgICBJbmZlcnJlZFN0cnVj
dHVyZUZpbmFsaXplciBtX2ZpbmFsaXplcjsKKyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRy
PEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKworICAgIC8vIE5PVEU6IElmIHRoaXMg
aXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGll
cyB0aGF0IGl0IHdvdWxkbid0IGJlCisgICAgLy8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fp
bi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBv
c2VkIHRvIHRoZSBERkcKKyAgICAvLyB0aHJlYWQuIFRoZSBERkcgd2lsbCB1c2UgdGhlIEluZmVy
cmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVzLgorICAgIElubGluZVdhdGNocG9p
bnRTZXQgbV93YXRjaHBvaW50U2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkluZmVy
cmVkVHlwZTo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gSW5mZXJy
ZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRU
eXBlVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKKwor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNz
SW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlVGFibGUiLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZVRhYmxlKSB9OworCitJbmZlcnJl
ZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5m
ZXJyZWRUeXBlVGFibGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVy
cmVkVHlwZVRhYmxlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlVGFibGUodm0pOworICAgIHJlc3Vs
dC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5m
ZXJyZWRUeXBlVGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlw
ZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZVRhYmxl
Kj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlVGFibGUtPkluZmVycmVkVHlwZVRhYmxlOjp+SW5m
ZXJyZWRUeXBlVGFibGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBp
bmZlcnJlZFR5cGVUYWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworCisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoaW5mZXJyZWRUeXBlVGFibGUtPm1fbG9jayk7
CisgICAgCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGluZmVycmVkVHlwZVRhYmxlLT5tX3RhYmxl
KSB7CisgICAgICAgIGlmICghZW50cnkudmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS52
YWx1ZS5jbGVhcigpOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJs
ZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQoreworICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOworICAgIGlmIChpdGVyID09
IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIFRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBl
cy4KKyAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAgaXRlci0+
dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0
dXJuIGl0ZXItPnZhbHVlLmdldCgpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRh
YmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCB1aWQpOworfQorCitJ
bmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Cit9CisKK2Jvb2wg
SW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKAorICAgIFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQor
eworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5
IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIAorICAgIGlmIChhZ2UgPT0g
T2xkUHJvcGVydHkpIHsKKyAgICAgICAgVGFibGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90YWJs
ZS5maW5kKHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUu
ZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYnNl
bmNlIG9uIHJlcGxhY2UgPT4gdG9wLgorICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVl
LT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIAorICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0
ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRU
eXBlPigpKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIElu
ZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLnNldCh2bSwgdGhpcywgaW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3Ao
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2Up
Cit7CisgICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9u
bHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgaWYgKGFnZSA9PSBPbGRQ
cm9wZXJ0eSkgeworICAgICAgICBUYWJsZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZp
bmQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQo
KSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVw
bGFjZSA9PiB0b3AuCisKKyAgICAgICAgaXRlci0+dmFsdWUtPm1ha2VUb3Aodm0pOworICAgICAg
ICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVGFi
bGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVy
dHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAg
aWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRvcCh2bSk7CisgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5jbGVhcigpOworfQorCitJbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFi
bGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUu
Z2V0KCkpCit7Cit9CisKK0luZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKQor
eworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJy
ZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkluZmVy
cmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
QSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBK
U0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVzdHJ1Y3Rv
ciBhbmQgbWFrZXMgbGlmZXR5cGUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNl
IGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJlIGRlbGV0
ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVy
dHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZl
cnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5
b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21l
IFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlwZXMg
b2YgcHJvcGVydGllcyBmcm9tCisvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRoZSBz
dHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2NsYXNzIElu
ZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRl
KFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0K
KworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9
CisKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRy
IGZvciBib3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKKyAgICAv
LyBvd25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHkuCisgICAg
SW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJp
bmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAg
ICBJbmZlcnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUpOworCisgICAgZW51bSBTdG9yZWRQcm9w
ZXJ0eUFnZSB7CisgICAgICAgIE5ld1Byb3BlcnR5LAorICAgICAgICBPbGRQcm9wZXJ0eQorICAg
IH07CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRo
aXMgcHJvcGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAor
ICAgIC8vIHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGlu
dGVybmFsbHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCisgICAgLy8gSW52
YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBh
IHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChWTSYsIFBy
b3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCitwcml2YXRlOgorICAgIEluZmVycmVk
VHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICAvLyBCb3R0
b206IGFic2VuY2UgZnJvbSB0YWJsZS4KKyAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUs
ICF2YWx1ZS0+aXNSZWxldmFudCgpLCBvciBhYnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8KKyAg
ICAvLyBXZSBrbm93IGhvdyB0byBkZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBp
cyBib3R0b20gb3IgdG9wIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIC8vIHByb3BlcnR5
IGlzIHByZXNlbnQgaW4gdGhlIG93bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24g
dGhlIHN0cnVjdHVyZSwgYWJzZW5jZSBtYXkgaGF2ZQorICAgIC8vIGRpZmZlcmVudCBtZWFuaW5n
cy4gVGhlIHdheSB0aGF0IHRoaXMgY2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVj
dHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkKKyAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlh
dGUgYmV0d2VlbiBhY3Rpb25zOiByZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGlu
ZyBhIG5ldyBwcm9wZXJ0eQorICAgIC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5z
IGJvdHRvbS4gSWYgd2UncmUgc3RvcmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFj
ZSwgdGhlbgorICAgIC8vIGFic2VuY2UgbWVhbnMgdG9wLiBUbyBtYWtlIHRoaXMgd29yaywgd2Ug
aGF2ZSB0byB3YXRjaCBvdXQgZm9yIHRoZSBjYXNlIHdoZXJlIHR3byBzdHJ1Y3R1cmVzLCBTMSBh
bmQKKyAgICAvLyBTMiwgc2hhcmUgdGhlIHNhbWUgSW5mZXJyZWRUeXBlVGFibGUgYW5kIG5laXRo
ZXIgb2YgdGhlbSBpbml0aWFsbHkga25vdyBhYm91dCBwcm9wZXJ0eSBQLiBTMSBtYXkKKyAgICAv
LyB3YW50IHRvIGFkZCBQIHdpdGhvdXQgYSB0eXBlLCB3aGlsZSBTMiBtYXkgd2FudCB0byBhZGQg
UCB3aXRoIGEgdHlwZS4gSWYgUzEgYWRkZWQgUCBhbmQgdXNlZCBhYnNlbmNlCisgICAgLy8gdG8g
aW5kaWNhdGUgVG9wLCB0aGVuIFMyIHdvdWxkIHVzZSB0aGF0IGFic2VuY2UgdG8gbWVhbiBCb3R0
b20gYW5kIHdvdWxkIGVuZCB1cCBjcmVhdGluZyBhIG5vbi1Ub3AKKyAgICAvLyBlbnRyeSBpbiB0
aGUgdGFibGUuIFRoZW4gUzEgd291bGQgZm9yZ2V0IHRoYXQgaXQgd2FudGVkIFRvcCwgYW5kIHdv
dWxkIHVzZSBTMidzIHR5cGUuIENsZWFybHksCisgICAgLy8gdGhhdCdzIGJhZC4gV2UgYXZvaWQg
c3VjaCBjb25mdXNpb24gYnkgZW5zdXJpbmcgdGhhdCBhIHRyYW5zaXRpb24gYWx3YXlzIGFkZHMg
YW4gZW50cnkuIEhlbmNlLAorICAgIC8vIGFic2VuY2UtbWVhbnMtYm90dG9tIG9ubHkgY29tZXMg
aW50byBwbGF5IGZvciBwcm9wZXJ0aWVzIGFkZGVkIGJlZm9yZSB0aGUgSW5mZXJyZWRUeXBlVGFi
bGUgd2FzCisgICAgLy8gY3JlYXRlZC4KKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFVuaXF1
ZWRTdHJpbmdJbXBsPiwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4sIElkZW50aWZpZXJSZXBI
YXNoLCBIYXNoVHJhaXRzPFVuaXF1ZWRTdHJpbmdJbXBsKj4+IFRhYmxlVHlwZTsKKyAgICAKKyAg
ICBUYWJsZVR5cGUgbV90YWJsZTsKKworICAgIC8vIFdlIG9ubHkgZ3JhYiB0aGlzIGxvY2sgd2hl
biB3ZSdyZSBkb2luZyBtb2RpZmljYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCwgb3IgcmVhZHMg
b24gdGhlIGNvbXBpbGVyCisgICAgLy8gdGhyZWFkLiBUaGUgY29tcGlsZXIgdGhyZWFkIGlzIG5v
dCBhbGxvd2VkIHRvIGRvIG1vZGlmaWNhdGlvbnMuCisgICAgQ29uY3VycmVudEpJVExvY2sgbV9s
b2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVU
YWJsZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzExODksOCBAQCBpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
IHsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAg
ICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVu
dEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAg
LTEyMjcsMjkgKzEyMjksNDAgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVy
bmFsKAogCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2Fw
YWNpdHkgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgb2Zmc2V0KSkgeworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKAorICAgICAgICBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKKyAgICBpZiAobmV3U3Ry
dWN0dXJlKSB7CisgICAgICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0
aW9uKAorICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgp
ID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIAogICAgICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0
dGVyZmx5KCk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRoaXMt
PnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVT
dG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CisgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMt
PnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVT
dG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Qu
c2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgIGJvb2wg
aGFzSW5mZXJyZWRUeXBlOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkg
JiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBlKSkgeworICAgICAgICAgICAgc3RydWN0
dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgICAgICAgICAgdm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJ
ZCk7CisgICAgICAgIH0KKwogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywg
b2Zmc2V0KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIApAQCAtMTI2
OCwxNiArMTI4MSwxOSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
CiAgICAgLy8gd2Ugd2FudC4KICAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOwogICAgIAotICAgIHN0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2lu
dEZpcmUpOworICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9m
ZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBuZXdT
dHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJ
ZCk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICBBU1NFUlQoc3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2Nh
dGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CisgICAgQVNTRVJUKG5ld1N0cnVj
dHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9j
YXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcHV0RGlyZWN0
KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNl
dCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgc3RydWN0dXJlLT5z
ZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOworICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNl
dENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEzMzUsOCArMTM1MSwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91
dFRyCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAg
ICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAg
ICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCkt
PmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cyk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICBib29sIHNob3Vs
ZE9wdGltaXplID0gZmFsc2U7CisgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclRyYW5z
aXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKKyAgICBzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1MCwxMSArMzUwLDE1IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KFYKICAgICBlbHNlCiAgICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxl
KTsKIAorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRh
YmxlLmdldCgpOworCiAgICAgZm9yIChzaXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07
KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgp
LCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkp
OworICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9u
YW1lSW5QcmV2aW91cy5nZXQoKSkpCisgICAgICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUg
PSB0cnVlOwogICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFBy
b3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApA
QCAtNDY0LDYgKzQ2OCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXQKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsK
ICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1
Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNp
dGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OworICAgIHRyYW5zaXRpb24tPm1f
aW5mZXJyZWRUeXBlVGFibGUuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
Pm1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpOwogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+
YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCkBAIC00NzksNiArNDg0LDI0IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKIAogU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0
KQogeworICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBzb21lIGdvb2QgcmVhc29ucyB3aHkgdGhpcyBn
b2VzIGRpcmVjdGx5IHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnkgcmF0aGVyIHRoYW4KKyAgICAv
LyBjYWNoaW5nIHRoZSByZW1vdmFsLiBXZSBjYW4gZml4IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1
dCB3ZSBtdXN0IHJlbWVtYmVyIHRvIGRvIHNvLCBpZiB3ZSBldmVyIHRyeQorICAgIC8vIHRvIG9w
dGltaXplIHRoaXMgY2FzZS4KKyAgICAvLworICAgIC8vIC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVz
dWFsbHkgc3RlYWwgdGhlIHByb3BlcnR5IHRhYmxlLCBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBw
b3NzaWJsZSBiZWNhdXNlIHRoZXkKKyAgICAvLyAgIGNhbiBqdXN0IHJlYnVpbGQgdGhlIHRhYmxl
IGJ5IGxvb2tpbmcgYXQgcGFzdCB0cmFuc2l0aW9ucy4gVGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0
aGUgdGFibGUgb25seQorICAgIC8vICAgZ3JldyBhbmQgbmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0
IHJlbW92YWxzLCB3ZSdkIGhhdmUgdG8gY2hhbmdlIHRoZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlh
bGl6YXRpb24KKyAgICAvLyAgIGNvZGUgdG8gaGFuZGxlIGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2
ZSBsb2dpYyB0byBnZXQgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0
CisgICAgLy8gICBsYWNrcyBhIHByb3BlcnR5IHRhYmxlIGJ5IGp1c3QgbG9va2luZyBiYWNrIHRo
cm91Z2ggdGhlIHNldCBvZiB0cmFuc2l0aW9ucyBzaW5jZSB0aGUgbGFzdAorICAgIC8vICAgc3Ry
dWN0dXJlIHRoYXQgaGFkIGEgcGlubmVkIHRhYmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2
ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZSBjYWNoZWQKKyAgICAvLyAgIHJlbW92YWxzLgorICAg
IC8vCisgICAgLy8gLSBJbmZlcnJlZFR5cGVUYWJsZSBhc3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMg
bmV2ZXIgaGFwcGVuZWQuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIGlmIHdlIGNvdWxkCisgICAg
Ly8gICByZW1vdmUgYSBwcm9wZXJ0eSBhbmQgdGhlbiByZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhl
ICJhYnNlbmNlIG1lYW5zIHRvcCIgb3B0aW1pemF0aW9uIHdvdWxkbid0CisgICAgLy8gICB3b3Jr
IGFueW1vcmUsIHVubGVzcyByZW1vdmFsIGFsc28gZWl0aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJl
bmNlIChieSBkb2luZyBzb21ldGhpbmcgZXF1aXZhbGVudCB0bworICAgIC8vICAgaGFzQmVlbkRp
Y3Rpb25hcnkpIG9yIGJ5IHN0cm9uZ2x5IG1hcmtpbmcgdGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1
cmluZyB0aGF0IGl0IGlzIG5vdCBhYnNlbnQsIGJ1dAorICAgIC8vICAgaW5zdGVhZCwgaGFzIGEg
bnVsbCBlbnRyeS4KKyAgICAKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxl
RGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CkBAIC04NDEsNiArODY0LDQzIEBA
IHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRj
aEludGVybmFsUHJvcGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9y
ZVZhbHVlU2xvdygKKyAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUsCisgICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0
b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOworICAg
IEFTU0VSVCghaGFzQmVlbkRpY3Rpb25hcnkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGluZmVy
cmVkIHR5cGUgdGFibGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9u
J3QgR0MgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5CisgICAgLy8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50
byB0aGUgcHJvcGVydHkgbWFwLgorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5m
ZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisgICAgaWYgKCF0YWJsZSkgeworICAgICAgICB0YWJsZSA9
IEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgICAgICBtX2luZmVycmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUp
OworICAgIH0KKworICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0
eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBX
ZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJv
cGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBz
byB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5
VGFibGUpOworCisgICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50Lgor
ICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5
TmFtZS51aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6
ZSkKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1
ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFi
bGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSwgYWdlKTsKKyAgICAgICAgZW50cnktPmhhc0lu
ZmVycmVkVHlwZSA9IGZhbHNlOworICAgIH0KK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RB
VFMKIAogUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0
cyA9IDA7CkBAIC0xMDU4LDYgKzExMTgsOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3Bl
cnR5VGFibGVVbnNhZmUpOwogICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRh
YmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xl
YXIoKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRh
YmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJy
ZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVy
cmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2Vs
bC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgpAQCAtODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9w
ZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZl
cnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFu
IGluZmVycmVkIHR5cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZv
ciBhIGZhc3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQ
cm9wZXJ0eU1hcEVudHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZz
ZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFz
SW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBA
IHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAs
IG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAg
ICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5h
dHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJs
aWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFBy
b3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMp
OworICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0
dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29t
ZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxl
IHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMg
bm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRp
Y3VsYXIKQEAgLTQ4MSw2ICs0ODYsNDAgQEAgcHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJl
LT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0K
IAorICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gISFtX2luZmVycmVkVHlwZVRhYmxlOworICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5m
ZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAo
SW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0YWJsZS0+Z2V0KHVpZCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNj
cmlwdG9yRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5m
ZXJyZWRUeXBlKiByZXN1bHQgPSBpbmZlcnJlZFR5cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQtPmRlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6
VG9wOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRy
YW5zaXRpb24oCisgICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNC
ZWVuRGljdGlvbmFyeSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFi
bGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6
TmV3UHJvcGVydHkpOworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFs
dWVGb3JSZXBsYWNlKAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAo
aGFzQmVlbkRpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0
b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5m
ZXJyZWRUeXBlVGFibGU6Ok9sZFByb3BlcnR5KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0
cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERl
dGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25l
IGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02MzIsNiArNjcxLDkgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsK
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2lsbFN0b3JlVmFsdWVTbG93KAorICAgICAg
ICBWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0
b3JlZFByb3BlcnR5QWdlKTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9u
TGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhG
b3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAtNjU1LDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcg
R0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJp
ZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJy
aWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJs
ZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBD
T01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVP
ZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUs
MTkgKzc1LDE5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAog
QUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxl
KQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5TWFwRW50cnkq
IGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0
dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiB9CiAgICAgCiBB
TFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBo
YXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworfQorCitBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSkKK3sKICAgICBBU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8o
KSA9PSBpbmZvKCkpOwogCkBAIC0xMDEsNiArMTAxLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAg
IGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKKyAgICBoYXNJbmZlcnJlZFR5cGUgPSBl
bnRyeS0+aGFzSW5mZXJyZWRUeXBlOwogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVk
ZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1
ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKQEAgLTI0MSw2
ICsyNDIsOCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
cHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURh
dGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBleGNlcHRpb25T
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1By
b21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiAr
MzAyLDggQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5m
ZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25S
YXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1
cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwpJbmRl
eDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4gc3RydWN0IEhh
c2hUYWJsZUFkZFJlc3VsdCB7CisgICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdCgpIDogaXNOZXdF
bnRyeShmYWxzZSkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdChJdGVyYXRvclR5cGUg
aXRlciwgYm9vbCBpc05ld0VudHJ5KSA6IGl0ZXJhdG9yKGl0ZXIpLCBpc05ld0VudHJ5KGlzTmV3
RW50cnkpIHsgfQogICAgICAgICBJdGVyYXRvclR5cGUgaXRlcmF0b3I7CiAgICAgICAgIGJvb2wg
aXNOZXdFbnRyeTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261290</attachid>
            <date>2015-09-15 20:44:19 -0700</date>
            <delta_ts>2015-09-15 21:25:12 -0700</delta_ts>
            <desc>more fixing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>184266</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNB
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJB
OEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBG
RkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZF
ODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZC
MUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAw
NzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAv
KiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIg
LyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBC
QUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYw
IC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUy
MTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQv
TExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0
QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
ZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8s
CiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJ
CQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBA
IC00Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8q
IEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2
IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0
NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQx
LDYgKzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1
Mjk2LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyog
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBG
NTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRF
QzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAog
CQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8s
CiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0
NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJ
CQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4
NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZB
OTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1
NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0
OTcsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJ
CQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcx
REQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFC
ODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4Niw2ICs2ODYsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
YXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNj
cmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAg
CiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcwOSw2ICs3MTYs
MTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBS
RUxFQVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CiAK
KyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJl
ZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJc
biIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2
ZSB0eXBlLlxuIik7CisgICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQdXRC
eUlkRmxhZ3MuaCIKIAorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTM1LDE2ICszNiwxNCBAQCBuYW1lc3BhY2UgV1RG
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsKLSAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJp
bmdPdXQ7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCJ8Iik7CiAgICAgaWYgKGZsYWdzICYgUHV0
QnlJZElzRGlyZWN0KQotICAgICAgICBzdHJpbmdPdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIpOwogCi0gICAgQ1N0cmluZyBz
dHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7Ci0gICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkp
Ci0gICAgICAgIG91dC5wcmludCgiTm9uZSIpOwotICAgIGVsc2UKLSAgICAgICAgb3V0LnByaW50
KHN0cmluZyk7CisgICAgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQgPSBJbmZlcnJlZFR5cGU6Omtp
bmRGb3JGbGFncyhmbGFncyk7CisgICAgb3V0LnByaW50KGNvbW1hLCBraW5kKTsKKyAgICBpZiAo
SW5mZXJyZWRUeXBlOjpoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgIG91dC5wcmludCgiOiIs
IGJpdHdpc2VfY2FzdDxpbnQzMl90PihkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZEZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRGbGFncy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
Niw3MCBAQAogI2lmbmRlZiBQdXRCeUlkRmxhZ3NfaAogI2RlZmluZSBQdXRCeUlkRmxhZ3NfaAog
CisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAotZW51
bSBQdXRCeUlkRmxhZ3MgeworZW51bSBQdXRCeUlkRmxhZ3MgOiBpbnRwdHJfdCB7CiAgICAgUHV0
QnlJZE5vbmUgPSAwLAotICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDEKKworICAgIC8vIFRoaXMgZmxh
ZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHV0X2J5X2lkIGlzIGRpcmVjdC4gVGhhdCBtZWFucyB0aGF0
IHdlIHN0b3JlIHRoZSBwcm9wZXJ0eSB3aXRob3V0CisgICAgLy8gY2hlY2tpbmcgaWYgdGhlIHBy
b3RvdHlwZSBjaGFpbiBoYXMgYSBzZXR0ZXIuCisgICAgUHV0QnlJZElzRGlyZWN0ID0gMHgxLAor
ICAgIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrID0gMHgxLAorCisgICAgLy8gTk9URTogVGhl
IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGluIExvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtLgorCisgICAgLy8gRGV0ZXJtaW5pbmcgdGhlIHJlcXVpcmVkIGluZmVycmVk
IHR5cGUgaW52b2x2ZXMgZmlyc3QgY2hlY2tpbmcgdGhlIHByaW1hcnkgdHlwZSBtYXNrLCBhbmQg
dGhlbgorICAgIC8vIHVzaW5nIHRoYXQgdG8gZmlndXJlIG91dCB0aGUgbWVhbmluZyBvZiB0aGUg
c2Vjb25kYXJ5IG1hc2s6CisgICAgLy8gc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlw
ZU1hc2spIHsKKyAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAv
LyAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgIC8v
ICAgICAuLi4KKyAgICAvLyAgICAgfQorICAgIC8vICAgICBicmVhazsKKyAgICAvLyBjYXNlIFB1
dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgLy8gY2FzZSBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAvLyAgICAgU3RydWN0
dXJlSUQgc3RydWN0dXJlSUQgPSBkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncyk7CisgICAgLy8gICAg
IGJyZWFrOworICAgIC8vIH0KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gMHg2LAorICAg
IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MCwgLy8gTmVlZCB0byBjaGVjayB0aGUg
c2Vjb25kYXJ5IHR5cGUgbWFzayBmb3IgdGhlIHR5cGUuCisgICAgUHV0QnlJZFByaW1hcnlUeXBl
T2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MiwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVy
ZSBJRC4KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9
IDB4NCwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVyZSBJRC4KKworICAgIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlTWFzayA9IC0weDgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20g
PSAweDAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuID0gMHg4LAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50
MzIgPSAweDE4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyID0gMHgyMCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3QgPSAweDMwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9
IDB4MzgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCiB9OwogCitpbmxpbmUg
UHV0QnlJZEZsYWdzIGVuY29kZVN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEIGlkKQoreworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMyk7CisjZWxzZQorICAgIFB1dEJ5SWRGbGFncyBy
ZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCk7CisgICAgQVNTRVJUKCEocmVz
dWx0ICYgflB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZW5kaWYKK30KKworaW5saW5lIFN0cnVjdHVyZUlEIGRlY29kZVN0cnVjdHVyZUlEKFB1dEJ5SWRG
bGFncyBmbGFncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgPj4gMyk7CisjZWxzZQorICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8U3RydWN0dXJlSUQ+KGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKTsKKyNlbmRp
ZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7
CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVy
ZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwpAQCAtMTAzLDcgKzEwMyw4IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0
QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisg
ICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwgbmV3
U3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogfQogCiBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQpAQCAtMTYyLDcgKzE2Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICB9CkBAIC0xOTMsNyArMTk0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9
IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
MjA2LDcgKzIwOCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhT
dGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+aW5mZXJy
ZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTMyOSw4ICszMzIsMTAgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIFNvLCBi
ZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJ
ZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKSkKKworICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQgdmFyaWFudCA9CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRv
ckZvcih1aWQpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMzU2LDEzICszNjEsMTYgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAg
CiAgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVj
dHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwg
dWlkLCAwLCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0
LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihz
dHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHRyYW5z
aXRpb24tPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSkpOwogICAgICAgICBpZiAoIWRp
ZEFwcGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9
IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Cisg
ICAgbV9yZXF1aXJlZFR5cGUgPSBvdGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIu
bV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNl
CkBAIC01MiwxOCArNTMsMjEgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVy
YXRvcgogICAgIHJldHVybiAqdGhpczsKIH0KIAotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03MSw2ICs3
NSw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtODUsNiArOTAsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0
dGVyKAogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6
Om1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVy
cmVkVHlwZTo6VG9wOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzNCw5ICsxNDAsMTIg
QEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogewogICAgIGlmICht
X29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fcmVxdWlyZWRUeXBlICE9IG90aGVyLm1fcmVxdWlyZWRUeXBlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIFJlcGxhY2U6
CisgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAg
ICAgICAgIGNhc2UgUmVwbGFjZTogewogICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSk7CkBAIC0xNTgsNiArMTY3LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2UoY29ucwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAg
ICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CkBAIC0yMTAsMTQgKzIyMCwxNSBAQCB2b2lk
IFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIAogICAgIGNhc2Ug
UmVwbGFjZToKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBp
bkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLAor
ICAgICAgICAgICAgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFRy
YW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjog
IiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAg
ICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwK
LSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZz
ZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlv
blNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRU
eXBlKCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJs
aWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRC
eUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwog
ICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0g
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgc2V0dGVyKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9w
ZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtOTksNiAr
OTksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CiAgICAgfQog
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHJlcXVpcmVkVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFR5cGU7CisgICAgfQorCiAgICAgYm9vbCB3cml0
ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25z
dDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKQEAgLTEzMCw2ICsxMzUsNyBAQCBwcml2
YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CiAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fcmVxdWlyZWRUeXBlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
TW9kZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIK
ICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgiCkBAIC05OCwxMiArOTcsMTAgQEAgc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rp
b24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KICAgICBV
bmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsg
fQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3Bl
cmFuZDsgfQotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oUHV0QnlJZEZsYWdzIGZsYWdzKSB7IHUu
cHV0QnlJZEZsYWdzID0gZmxhZ3M7IH0KICAgICB1bmlvbiB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZTsKICAgICAgICAgaW50MzJfdCBvcGVyYW5kOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsK
LSAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFnczsKICAgICB9IHU7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsMzkgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgdG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKICAgICB9Ci0gICAgCisKKyAgICAv
LyBOb3RlIHRoYXQgZm9yIGFueSB3YXRjaHBvaW50IHRoYXQgaXMgdmlzaWJsZSBmcm9tIHRoZSBE
RkcsIGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byB3cml0ZSBjb2RlIGxpa2U6CisgICAgLy8KKyAg
ICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAg
IC8vCisgICAgLy8gQ29uY3VycmVudGx5IHRvIHRoaXMsIHRoZSBERkcgY291bGQgZG86CisgICAg
Ly8KKyAgICAvLyBpZiAody5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcGVyZm9ybSBvcHRp
bWl6YXRpb25zOworICAgIC8vIGlmICghdy5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcmV0
cnkgY29tcGlsYXRpb247CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgdGhlIERGRyBhbGdvcml0
aG0gaXMgd2lkZXNwcmVhZCwgYW5kIHNvdW5kLCBiZWNhdXNlIGZpcmVBbGwoKSBhbmQgaW52YWxp
ZGF0ZSgpIHdpbGwgbGVhdmUKKyAgICAvLyB0aGUgd2F0Y2hwb2ludCBpbiBhICFpc1N0aWxsVmFs
aWQoKSBzdGF0ZS4gSGVuY2UsIGlmIGZpcmVBbGwoKSBvciBpbnZhbGlkYXRlKCkgaW50ZXJsZWF2
ZWQgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCBpc1N0aWxsVmFsaWQoKSBjaGVjayBhbmQgdGhl
IHNlY29uZCBvbmUsIHRoZW4gaXQgd291bGQgc2ltcGx5IGNhdXNlIHRoZSBERkcgdG8gcmV0cnkK
KyAgICAvLyBjb21waWxhdGlvbiBsYXRlci4KKyAgICAvLworICAgIC8vIEJ1dCwgaWYgeW91IGNo
YW5nZSBzb21lIHBpZWNlIG9mIHN0YXRlIHRoYXQgdGhlIERGRyBtaWdodCBvcHRpbWl6ZSBmb3Is
IGJ1dCBpbnZhbGlkYXRlIHRoZQorICAgIC8vIHdhdGNocG9pbnQgYnkgZG9pbmc6CisgICAgLy8K
KyAgICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQor
ICAgIC8vCisgICAgLy8gdGhlbiB0aGUgREZHIHdvdWxkIG5ldmVyIGtub3cgdGhhdCB5b3UgaW52
YWxpZGF0ZWQgc3RhdGUgYmV0d2VlbiB0aGUgdHdvIGNoZWNrcy4KKyAgICAvLworICAgIC8vIFRo
ZXJlIGFyZSB0d28gd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlzOgorICAgIC8vCisgICAgLy8gLSBD
YWxsIGZpcmVBbGwoKSB3aXRob3V0IGEgaXNCZWluZ1dhdGNoZWQoKSBjaGVjay4gVGhlbiwgdGhl
IERGRyB3aWxsIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBoYXMKKyAgICAvLyAgIGJlZW4gaW52
YWxpZGF0ZWQgd2hlbiBpdCBkb2VzIGl0cyBzZWNvbmQgY2hlY2suCisgICAgLy8KKyAgICAvLyAt
IERvIG5vdCBleHBvc2UgdGhlIHdhdGNocG9pbnQgc2V0IHRvIHRoZSBERkcgZGlyZWN0bHksIGFu
ZCBoYXZlIHlvdXIgb3duIHdheSBvZiB2YWxpZGF0aW5nIHdoZXRoZXIKKyAgICAvLyAgIHRoZSBh
c3N1bXB0aW9ucyB0aGF0IHRoZSBERkcgdGhyZWFkIHVzZWQgYXJlIHN0aWxsIHZhbGlkIHdoZW4g
dGhlIERGRyBjb2RlIGlzIGluc3RhbGxlZC4KICAgICBib29sIGlzQmVpbmdXYXRjaGVkKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChpc0ZhdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEyLDcgKzIxMTIsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8v
IG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVy
ZSBjaGFpbgotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChQdXRCeUlkTm9uZSk7IC8vIGlzIG5v
dCBkaXJlY3QKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PihQdXRC
eUlkTm9uZSkpOyAvLyBpcyBub3QgZGlyZWN0CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0y
MTM0LDcgKzIxMzQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVj
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7IC8vIHN0cnVjdHVyZSBjaGFpbiAodW51c2VkIGlmIGRpcmVjdCkKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0
aWNfY2FzdDxpbnQ+KChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJv
cGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJ
c0RpcmVjdCA6IFB1dEJ5SWROb25lKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3Bl
Y05vbmUpCiAgICAgewotICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCk7
CisgICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0LCBhZG1pdHRlZFR5cGVz
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSw3ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSks
IHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJh
Y3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJy
YXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgyOSwxMCArMTgyOSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1
cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSkpIHsKLSAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9n
cmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOworICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
RmlndXJlIG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEg
Y29uc3RhbnQsIG9yIG1heWJlCiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3Vi
dGxlPwpAQCAtMTg0MSwyMiArMTg0MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2
ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QK
ICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVz
W2ldLm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
IHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJl
c3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE4ODAsNyAr
MTg3MCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFk
eSBlbnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1
Y3R1cmVTZXQoKTsKICAgICAgICAgCkBAIC0xODg4LDEyICsxODc3LDI0IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0
aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1
Y3R1cmUgY2hlY2sKICAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24n
dC4KICAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
IGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25l
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAg
ICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY090aGVyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBm
aWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAgIAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCwg
YWRtaXR0ZWRUeXBlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMDg0
LDEzICsyMDg1LDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNz
RGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLCBkYXRhLm9mZnNldCk7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VI
ZWFwVG9wKCk7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50
aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXTsKKworICAgICAgICAvLyBGSVhNRTogVGhl
IHBhcnQgb2YgdGhpcyB0aGF0IGhhbmRsZXMgaW5mZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVsaWVz
IG9uIEFJIGtub3dpbmcgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyByaWdodCBub3cuIFRoYXQn
cyBwcm9iYWJseSBub3Qgb3B0aW1hbC4gSW4gc29tZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0gYW4g
b3B0aW1pemF0aW9uICh1c3VhbGx5CisgICAgICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFu
IEFJLCBtYXliZSBieSBDU0UgZm9yIGV4YW1wbGUpIHRoYXQgb2JzY3VyZXMgQUkncyB2aWV3IG9m
IHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIEdldEJ5T2Zmc2V0
IHJ1bnMuIEN1cnJlbnRseSwgd2hlbiB0aGF0IGhhcHBlbnMsIHdlJ2xsIGhhdmUgdG8gcmVseSBl
bnRpcmVseQorICAgICAgICAvLyBvbiB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIHdhcyBh
YmxlIHRvIHByb3ZlLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9ncmFwaC5pbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KSwgdWlkLCBkYXRhLm9mZnNldCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisK
KyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJz
ZXIgY2FtZSB1cCB3aXRoIGlzIGJldHRlci4KKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlRnJv
bVBhcnNpbmc7CisgICAgICAgIHR5cGVGcm9tUGFyc2luZy5zZXQobV9ncmFwaCwgZGF0YS5pbmZl
cnJlZFR5cGUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZUZyb21QYXJzaW5nKTsKKworICAgICAgICAvLyBJZiB3ZSBkZWNpZGUgdGhh
dCB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbnkgdmFsdWUgdGhhdCB0aGlzIGNhbiByZXR1cm4sIHRo
ZW4gaXQncyBwcm9iYWJseQorICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb21waWxhdGlvbiB3YXMg
YWxyZWFkeSBpbnZhbGlkYXRlZC4KKyAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAg
ICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisKKyAgICAgICAgZm9yTm9kZShub2Rl
KSA9IHZhbHVlOworICAgICAgICBpZiAodmFsdWUubV92YWx1ZSkKKyAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC0yMTIwLDYgKzIxMzcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRp
bWVzLCBidXQgdGhpcyBub2RlIGlzIEZUTC1vbmx5LgogICAgICAgICBtX3N0YXRlLnNldEZvdW5k
Q29uc3RhbnRzKHRydWUpOwogICAgICAgICAKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlk
ZW50aWZpZXJOdW1iZXJdOworCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSByZXN1bHQ7CkBAIC0yMTI5LDE4ICsyMTQ4LDI5IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJn
ZShzZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5r
aW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiB7CisgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5t
ZXRob2QoKS5jb25zdGFudCgpLAorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3Vs
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAgICAgIHRoaXNS
ZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKmdl
dENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0
KTsKKworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDogeworICAgICAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIHVpZCwg
bV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0
aW9uKQpAQCAtMjE2Myw2ICsyMTkzLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAg
ICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdGluZ1ZhbHVlOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
QEAgLTIxNzAsNiArMjIwMiwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlm
ICh0aGlzU2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworICAgICAgICAg
ICAgdGhpc1ZhbHVlLmZpbHRlcihtX2dyYXBoLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAg
ICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25z
LmFwcGVuZCgKQEAgLTIxODUsNiArMjIyMiw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1pdCwg
dHJhbnNpdGlvbnMpOwogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdl
U3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpID0gcmVzdWx0aW5nVmFsdWU7CisgICAgICAgIGlmICghIW9yaWdpbmFsVmFsdWUgJiYgIXJl
c3VsdGluZ1ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIyNjQsMTMgKzIzMDQsMTMgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZs
dXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3Ry
dWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAg
ICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIFB1
dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAog
ICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLAogICAgICAgICAgICAgICAg
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAg
ICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5z
aXRpb25zOwpAQCAtMjYxNSw5ICsyNjU1LDkgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZp
bHRlcigKLSAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQp
CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVj
dWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQogewotICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFw
aCwgc2V0KSA9PSBGaWx0cmF0aW9uT0spCisgICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBz
ZXQsIGFkbWl0dGVkVHlwZXMpID09IEZpbHRyYXRpb25PSykKICAgICAgICAgcmV0dXJuIEZpbHRy
YXRpb25PSzsKICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgIHJldHVybiBDb250
cmFkaWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDU2
IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0VHlwZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHN3aXRj
aCAoZGVzY3JpcHRvci5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgor
ICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvb2xlYW46CisgICAgICAgIHNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBzZXRUeXBlKFNwZWNPdGhl
cik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAg
ICAgIHNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHNldFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHNl
dChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1lcmdlKFNwZWNP
dGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0Ogor
ICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBzZXRUeXBlKGdyYXBo
LCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG1ha2VIZWFwVG9wKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldCgKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKK3sKKyAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIGlmIChjbG9iYmVyU3RhdGUg
PT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsK
K30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgm
IGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KHJlcHJlc2VudGF0aW9uID09IE5vZGVSZXN1bHREb3VibGUpIHsKQEAgLTE4OSw4ICsyMzksMjIg
QEAgYm9vbCBBYnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBv
bGRNZSAhPSAqdGhpczsKIH0KIAotRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorYm9vbCBBYnN0cmFj
dFZhbHVlOjppc1R5cGUoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGluZmVycmVkVHlwZSkgY29uc3QKIHsKKyAgICBBYnN0cmFjdFZhbHVlIHR5cGVWYWx1ZTsK
KyAgICB0eXBlVmFsdWUuc2V0KGdyYXBoLCBpbmZlcnJlZFR5cGUpOworCisgICAgQWJzdHJhY3RW
YWx1ZSBtZXJnZWRWYWx1ZSA9ICp0aGlzOworICAgIG1lcmdlZFZhbHVlLm1lcmdlKHR5cGVWYWx1
ZSk7CisKKyAgICByZXR1cm4gbWVyZ2VkVmFsdWUgPT0gdHlwZVZhbHVlOworfQorCitGaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcigKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCit7Cisg
ICAgQVNTRVJUKCEoYWRtaXR0ZWRUeXBlcyAmIFNwZWNDZWxsKSk7CisgICAgCiAgICAgaWYgKGlz
Q2xlYXIoKSkKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKICAgICAKQEAgLTE5OCw3ICsy
NjIsNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgLy8g
aGF2aW5nIHN0cnVjdHVyZXMsIGFycmF5IG1vZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjMKICAgICAK
LSAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOworICAgIG1f
dHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgfCBhZG1pdHRlZFR5cGVz
OwogICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsK
ICAgICBtX3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgIApAQCAtMzE1LDYgKzM3OSwxMyBA
QCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihjCiAgICAgcmV0dXJuIENv
bnRyYWRpY3Rpb247CiB9CiAKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEFic3RyYWN0VmFsdWUgZmlsdGVyVmFsdWU7CisgICAgZmlsdGVyVmFsdWUuc2V0
KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZmlsdGVyKGZpbHRlclZhbHVlKTsKK30K
Kwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8gV2Ug
Y291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZSBjb250cmF2ZW5lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNw
ZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKQEAgLTIxNCw3ICsyMTUs
MTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgp
OwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBz
ZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKyAgICB2b2lkIHNl
dChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSk7CisKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5v
ZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogPSBudWxscHRyKTsKICAgICB2b2lkIGZpeFR5
cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGUqKTsKICAgICAKQEAgLTI4MCwxNyArMjg0
LDI3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiAhKG1f
dHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAgfQorCisgICAgYm9vbCBpc1R5cGUoR3JhcGgmLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKSBjb25zdDsKKworICAgIC8vIEZpbHRlcnMg
dGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBJZiB0aGUgYWRtaXR0ZWRU
eXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCisgICAgLy8gaW1wbGljaXRseSBmaWx0
ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3aGljaCBhcmUg
dXN1YWxseSBhIHN1YnNldCBvZgorICAgIC8vIFNwZWNDZWxsLiBIZW5jZSwgYWZ0ZXIgdGhpcyBj
YWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgbm9uLWNlbGwgbWVtYmVycy4g
QnV0LCB5b3UgY2FuCisgICAgLy8gdXNlIGFkbWl0dGVkVHlwZXMgdG8gcHJlc2VydmUgc29tZSBu
b24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0IGl0J3Mgd3JvbmcgZm9yIGFkbWl0dGVkVHlwZXMgdG8g
b3ZlcmxhcAorICAgIC8vIHdpdGggU3BlY0NlbGwuCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0
ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5
cGVzID0gU3BlY05vbmUpOwogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBo
JiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJh
eU1vZGVzKEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1bGF0
ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVu
VmFsdWUmIHZhbHVlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihjb25zdCBBYnN0cmFj
dFZhbHVlJik7CisKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIEZpbHRyYXRpb25SZXN1bHQgY2hh
bmdlU3RydWN0dXJlKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgYm9v
bCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wgdmFsaWRhdGUo
SlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDkgKzIwNiw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQs
IEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29s
IGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJu
YWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOwotICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSog
aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
LSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNl
dCk7CisgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYs
IE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQp
OwogCiAgICAgLy8gQ3JlYXRlIGEgcHJlc2VuY2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYmFz
ZWQgb24gc29tZSBrbm93biBvZmZzZXQgYW5kIHN0cnVjdHVyZSBzZXQuIERvZXMgbm90CiAgICAg
Ly8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25kaXRpb24sIGJ1dCBpdCBtYXkgcmV0dXJu
IGEgbnVsbCBvbmUgaWYgaXQgZW5jb3VudGVycyBhIGNvbnRyYWRpY3Rpb24uCkBAIC0yMzA3LDcg
KzIzMDYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJl
ZFR5cGUsIE5vZGVUeXBlIG9wKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMTgsMTMgKzIzMTksMTcgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9m
ZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CisgICAgbV9ncmFw
aC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpOwogICAgIAogICAgIE5vZGUqIGdl
dEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlv
biksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CiAKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9
CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQor
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAorICAgIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsCisgICAgTm9kZSogdmFsdWUpCiB7CiAg
ICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQp
KQpAQCAtMjMzNSw2ICsyMzQwLDggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBp
bmZlcnJlZFR5cGU7CisgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5
cGUpOwogICAgIAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9w
SW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ5
LDcgKzI0NTYsOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJu
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9k
ZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90
eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJh
c2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAg
cmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5v
ZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3As
IG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAg
Ly8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTU1LDEzICsyNTYz
LDEzIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0
cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChK
U09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+
KCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVj
ay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAg
ICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJl
cl07Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQo
KS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUg
bG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUg
dGhlCiAgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjI2
LDkgKzI2MzQsMTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBp
ZiAoY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0
YW50KTsKICAgICAgICAgfQorCisgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZl
cnJlZFR5cGU7CisgICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHRoaXNUeXBlID0gbV9ncmFw
aC5pbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICAg
ICAgaW5mZXJyZWRUeXBlLm1lcmdlKHRoaXNUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAg
ICAgICAgCiAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
ICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZz
ZXQoKSwgbG9hZE9wKTsKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBpbmZlcnJlZFR5cGUsIGxvYWRPcCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwpAQCAtMjYzOSw3ICsyNjU2LDcgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogICAgIFJFTEVBU0VfQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJl
c2VuY2VMaWtlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFu
dC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZVB1dEJ5
T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQo
KSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjc5OCw2ICsyODE1LDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CisKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkKKyAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJJbmZlcnJlZFR5cGUodmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CiAgICAgICAgIAogICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CkBAIC0yODU0LDYgKzI4NzQsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gdmFyaWFudC5vZmZz
ZXQoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CisgICAgICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IHZhcmlhbnQucmVxdWlyZWRUeXBlKCk7Cisg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoZGF0YS0+aW5mZXJyZWRUeXBlKTsK
ICAgICAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBQdXRCeU9mZnNldCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0
U3RhdGUuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBA
QCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kCiAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlv
bjoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgorICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAvLyBU
aGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJ
dCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVhcHMgaW50byB0aG9z
ZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0
IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4
OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgpAQCAtMzczLDcgKzM3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9m
ZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQucmVxdWlyZWRUeXBl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDgsNiArNDUwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNl
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VW
YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKIAogICAg
ICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNo
IENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAg
ICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZh
dWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KQEAgLTQ2Myw3ICs0NjYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3Rh
dHVzLmlzU2ltcGxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5udW1WYXJpYW50cygpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkg
PiAxICYmICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKQEAgLTY0MCw3ICs2NDMsOSBAQCBw
cml2YXRlOgogICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBjaGls
ZEVkZ2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5v
ZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgIHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcCkKICAg
ICB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
IApAQCAtNjU2LDYgKzY2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
JiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0
YS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50
aWZpZXJOdW1iZXI7CisgICAgICAgIGRhdGEuaW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwog
ICAgICAgICAKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVy
dHlTdG9yYWdlKTsKICAgICB9CkBAIC02NjQsOCArNjcwLDEwIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBj
aGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgCisKICAgICAgICAgYWRkQmFzZUNo
ZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KTsKKyAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldCwgaW5kZXhJbkJsb2NrLCBvcmlnaW4sIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgdmFy
aWFudC5yZXF1aXJlZFR5cGUoKSk7CiAKICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChLbm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOwpAQCAtNzMwLDYgKzczOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBBcmlzZXMg
d2hlbiB3ZSBwcnVuZSBNdWx0aUdldEJ5T2Zmc2V0LiBXZSBjb3VsZCBoYXZlIGEKICAgICAgICAg
ICAgIC8vIE11bHRpR2V0QnlPZmZzZXQgd2l0aCBhIHNpbmdsZSB2YXJpYW50IHRoYXQgY2hlY2tz
IGZvciBzdHJ1Y3R1cmUgUywKICAgICAgICAgICAgIC8vIGFuZCB0aGUgaW5wdXQgaGFzIHN0cnVj
dHVyZXMgUyBhbmQgVCwgZm9yIGV4YW1wbGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3Jp
Z2luLAogICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzZXQp
KSwgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorI2RlZmluZSBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSW5m
ZXJyZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGRvY3VtZW50cyB0aGUgREZHJ3MgZXhwZWN0YXRp
b24gZm9yIGFuIEluZmVycmVkVHlwZTogc3BlY2lmaWNhbGx5LCB0aGF0IHdlIHdhbnQgaXQgdG8g
aGF2ZSBhIGxpdmUKKy8vIEluZmVycmVkVHlwZSBvYmplY3QgYW5kIHRoYXQgdGhpcyBvYmplY3Qg
aGFzIHRoZSB0eXBlIHRoYXQgd2Ugb3JpZ2luYWxseSBzYXcuCisKK2NsYXNzIERlc2lyZWRJbmZl
cnJlZFR5cGUgeworcHVibGljOgorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoKQorICAgICAgICA6
IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBEZXNpcmVkSW5mZXJy
ZWRUeXBlKEluZmVycmVkVHlwZSogb2JqZWN0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGV4cGVjdGVkKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2V4
cGVjdGVkKGV4cGVjdGVkKQorICAgIHsKKyAgICB9CisKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBl
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29iamVjdChudWxs
cHRyKQorICAgICAgICAsIG1fZXhwZWN0ZWQoSW5mZXJyZWRUeXBlOjpUb3ApCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVj
dCAmJiBtX2V4cGVjdGVkOyB9CisKKyAgICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0OyB9CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZDsgfQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVj
dGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgbV9vYmplY3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2Jq
ZWN0CisgICAgICAgICAgICAmJiBtX2V4cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2V4cGVjdGVkID09IEluZmVycmVkVHlwZTo6VG9wOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURjo6UHRySGFzaDxJbmZlcnJlZFR5cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVk
Lmhhc2goKSAqIDc7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnBy
aW50KGluQ29udGV4dChtX2V4cGVjdGVkLCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlciht
X29iamVjdCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUqIG1fb2JqZWN0OworICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBtX2V4cGVjdGVkOworfTsKKworc3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBhLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVy
cmVkVHlwZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNo
IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3Rl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7
IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQCB2b2lkIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6CiAgICAgfQogfQogCit2b2lkIEluZmVycmVkVHlw
ZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAga2V5LmFkZChjb21tb24ud2F0
Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2ly
ZWRXYXRjaHBvaW50cygpIHsgfQogRGVzaXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CiAKQEAgLTkzLDYgKzk4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjph
ZGRMYXppbHkoY29uc3QKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5
KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJiBrZXkpCit7CisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkp
OworfQorCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMDgs
NiArMTE4LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAg
IG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAg
bV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAg
ICBtX2luZmVycmVkVHlwZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAK
IGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTExNiw3
ICsxMjcsOCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAg
ICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJl
ZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGls
bFZhbGlkKCkKLSAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxp
ZCgpOworICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkK
KyAgICAgICAgJiYgbV9pbmZlcnJlZFR5cGVzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0CkBAIC0xMjcsNiArMTM5LDcgQEAgdm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZh
bHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAg
ICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdz
LCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNv
bmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCks
ICJcbiIpOworICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQo
bV9pbmZlcnJlZFR5cGVzLCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRh
dGEuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5m
ZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKQEAgLTkxLDYgKzkyLDE4IEBAIHN0cnVjdCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG8KICAgICB9CiB9OwogCitzdHJ1Y3QgSW5mZXJy
ZWRUeXBlQWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERl
c2lyZWRJbmZlcnJlZFR5cGUmLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVl
bkludmFsaWRhdGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAha2V5LmlzU3RpbGxWYWxpZCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUm
IGtleSwgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5D
b250ZXh0KGtleSwgY29udGV4dCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFdh
dGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0
Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRApAQCAtMTU5LDYgKzE3MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQn
cyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFw
aDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBt
YWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXpp
bHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIEl0J3MgcmVjb21t
ZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVy
cmVkVHlwZUZvcigpLCB3aGljaCBkb2VzCisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgor
ICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAg
ICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIApAQCAtMTg2LDYgKzIwMywxMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNX
YXRjaGVkKGtleSk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZl
cnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNX
YXRjaGVkKGtleSk7CisgICAgfQogCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKQEAgLTE5Niw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFs
dWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBB
cnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlw
ZUFkYXB0b3I+IG1faW5mZXJyZWRUeXBlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luZmVy
cmVkVHlwZUNoZWNrLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAi
REZHUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpA
QCAtMTA5Miw2ICsxMDkzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3du
Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNr
KAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4SW5CbG9jaywgbm9kZS0+
b3JpZ2luLCBub2RlLT5jaGlsZDMoKS5ub2RlKCksCisgICAgICAgICAgICAgICAgbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGEoKS5pbmZlcnJlZFR5cGUpOwogICAgICAgICAgICAgc3BlY3VsYXRlRm9y
QmFycmllcihub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4OTgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjEsMTIgKzI2MSwxNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9
IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlk
Iiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlmaWVycygp
W3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOwogICAgICAgICBvdXQu
cHJpbnQoIiwgIiwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQpKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGluZmVycmVkVHlwZSA9ICIsIGluQ29udGV4dChz
dG9yYWdlQWNjZXNzRGF0YS5pbmZlcnJlZFR5cGUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYg
KG5vZGUtPmhhc011bHRpR2V0QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVsdGlHZXRCeU9m
ZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJpZCIsIGRhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlm
aWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tpXSwgY29udGV4dCkpOworICAgICAg
ICAgICAgaWYgKGRhdGEuY2FzZXNbaV0ubWV0aG9kKCkua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiIChpbmZlcnJlZCB2YWx1ZSA9
ICIsIGluQ29udGV4dChpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoZGF0YS5jYXNlc1tpXS5zZXQo
KSwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdKSwgY29udGV4dCksICIpIik7
CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc011bHRpUHV0QnlPZmZzZXREYXRh
KCkpIHsKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpOwpAQCAtODg3LDYgKzg5MSwzOCBAQCBib29sIEdyYXBoOjppc1NhZmVU
b0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhz
dGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKIH0KIAorSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCit7
CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtleS5zdHJ1Y3R1cmUoKSk7CisgICAgCisgICAgYXV0
byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtX2lu
ZmVycmVkVHlwZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIElu
ZmVycmVkVHlwZSogdHlwZU9iamVjdCA9IGtleS5zdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9y
KGtleS51aWQoKSk7CisgICAgaWYgKCF0eXBlT2JqZWN0KSB7CisgICAgICAgIG1faW5mZXJyZWRU
eXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJl
ZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURl
c2NyaXB0b3IgPSB0eXBlT2JqZWN0LT5kZXNjcmlwdG9yKCk7CisgICAgaWYgKHR5cGVEZXNjcmlw
dG9yLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRvcCkgeworICAgICAgICBtX2luZmVycmVkVHlw
ZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRU
eXBlOjpUb3A7CisgICAgfQorICAgIAorICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCB0eXBl
RGVzY3JpcHRvcik7CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHR5cGVP
YmplY3QpOworICAgIHJlZ2lzdGVySW5mZXJyZWRUeXBlKHR5cGVEZXNjcmlwdG9yKTsKKworICAg
IC8vIE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0aGlzIGRlc2lyZWQgaW5m
ZXJyZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1heQorICAgIC8vIHBvaW50
IHRvIHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KKyAgICBtX3BsYW4ud2F0Y2hwb2lu
dHMuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlwZURlc2NyaXB0
b3IpKTsKKworICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKK30KKwogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAg
LTEwNjEsNyArMTA5Nyw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHko
SlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBi
YXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlz
Q2xvYmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAg
ICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2Ug
Y291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8g
Y29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTExMiwzNyBAQCBKU1Zh
bHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENv
bnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwog
fQogCitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0
OworICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
eworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNl
dCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIGlmIChjbG9iYmVy
U3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgcmVzdWx0LmNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJhY3RWYWx1ZSBHcmFw
aDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIGlmIChKU1ZhbHVlIHZh
bHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQpKSB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0aGlzLCAqZnJlZXplKHZh
bHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm4gaW5mZXJy
ZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCwgY2xvYmJlclN0
YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9wKCk7Cit9CisKIEpTVmFs
dWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVlIGJhc2UsIFNjb3BlT2Zm
c2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21lIGNvbmN1cnJlbmN5IHN0
b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVDb2RlUGFyc2VyLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg5ODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRG
R1BsYW4uaCIKICNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisjaW5jbHVkZSAiREZH
UHJvcGVydHlUeXBlS2V5LmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAi
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCkBAIC02NzUsNiAr
Njc2LDI3IEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRp
bmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhp
cyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJh
Y2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0
KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICB2b2lkIHJlZ2lzdGVySW5mZXJyZWRUeXBl
KGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlLnN0cnVjdHVyZSgpKQorICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZS5z
dHJ1Y3R1cmUoKSk7CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBl
IHdlIGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhl
IGZ1dHVyZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNv
bnN0IFByb3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZl
cnJlZFR5cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlU
eXBlS2V5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJl
c0FyZVdhdGNoZWQpOworCisgICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0
eSBpbmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBh
YnN0cmFjdAorICAgIC8vIHZhbHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhl
IGdpdmVuIGFic3RyYWN0IHZhbHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZh
bHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUp
OwogICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sq
KTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1l
Kik7CkBAIC04NTYsNiArODc4LDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNz
OwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+
PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9w
ZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtleSwg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9taW5hdG9y
cyBtX2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7
CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0lu
ZmVycmVkVHlwZUNoZWNrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGlu
c2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwKKyAg
ICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCit7CisgICAgaW5zZXJ0aW9u
U2V0LmdyYXBoKCkucmVnaXN0ZXJJbmZlcnJlZFR5cGUodHlwZSk7CisgICAgCisgICAgc3dpdGNo
ICh0eXBlLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEZvcmNlT1NSRXhp
dCwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJv
b2xlYW46CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05v
bmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEJvb2xlYW5Vc2UpKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdl
KGJhc2VOb2RlLCBPdGhlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6SW50MzI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRl
eCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEludDMyVXNlKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmln
aW4sIEVkZ2UoYmFzZU5vZGUsIE51bWJlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBTdHJp
bmdVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAg
ICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5z
dHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAg
IE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1
cmUoKSkpLAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2UpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdp
biwgRWRnZShiYXNlTm9kZSwgT2JqZWN0VXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2Rl
LCBPYmplY3RPck90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0goaW5z
ZXJ0aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNo
ZWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVy
cmVkVHlwZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJyZWRU
eXBlQ2hlY2tfaAorI2RlZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkluZmVy
cmVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEluc2Vy
dHMgYSB0eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2ZW4g
aW5mZXJyZWQgdHlwZS4KK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0
aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5mZXJy
ZWRUeXBlQ2hlY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0
IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUg
aW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVl
ZCB0byByZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhp
cyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlw
ZSBpcworICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGlu
ZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMzUsMTQgKzIxMzUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogc3RydWN0dXJlcykgewogICAgICAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGN1cnJlbnRPZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb3VyIGFuYWx5c2lzIHRyZWF0
cyBNdWx0aVB1dEJ5T2Zmc2V0IGxpa2UgYW4gZXNjYXBlLCB3ZSBvbmx5IGhhdmUgdG8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGRlYWwgd2l0aCBzdG9yaW5nIHJlc3VsdHMgdGhhdCB3b3Vs
ZCBoYXZlIGJlZW4gcHJldmlvdXNseSBzdG9yZWQgYnkgUHV0QnlPZmZzZXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFw
cHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5j
b21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVu
dFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLT52
YXJpYW50cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNk
ZWZpbmUgREZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmlu
ZGluZyBhIHByb3BlcnR5J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVu
aXF1ZWRTdHJpbmdJbXBsKi4KKworY2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAg
ICBQcm9wZXJ0eVR5cGVLZXkoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAg
ICAgICwgbV91aWQobnVsbHB0cikKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6
IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAg
IH0KKworICAgIFByb3BlcnR5VHlwZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVk
VUlEKCkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZSAmJiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdWlk
ID09IG90aGVyLm1fdWlkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9w
ZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkg
KyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCk7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fc3RydWN0dXJlICYmIG1fdWlkID09IGRlbGV0ZWRVSUQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRl
eHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKyIsIG1fdWlkKTsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFVuaXF1ZWRT
dHJpbmdJbXBsKiBkZWxldGVkVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBtX3VpZDsKK307CisKK3N0cnVjdCBQcm9wZXJ0eVR5cGVLZXlIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYSwg
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6
UHJvcGVydHlUeXBlS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQ
cm9wZXJ0eVR5cGVLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0
eVR5cGVLZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHUHJvcGVydHlUeXBlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgogICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAg
IGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CkBAIC0xMjcs
NiArMTI4LDkgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAg
IGlmICghc2FmZVRvRXhlY3V0ZUVkZ2UucmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIC8vIE5PVEU6IFRoaXMgdGVuZHMgdG8gbGllIHdoZW4gaXQgY29tZXMgdG8gZWZmZWN0
ZnVsIG5vZGVzLCBiZWNhdXNlIGl0IGtub3dzIHRoYXQgdGhleSBhcmVuJ3QgZ29pbmcgdG8KKyAg
ICAvLyBnZXQgaG9pc3RlZCBhbnl3YXkuCisKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5OCwzNiArMzg5OCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
bm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigK
LSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVsw
XSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVy
ZSh0aGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
dHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWws
IHN0cnVjdHVyZS5ncHIoKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNo
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3Qo
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVD
aGVja1N0cnVjdHVyZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxMSwzOCArMzkxMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
bm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIEV4aXRLaW5k
IGV4aXRLaW5kOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCi0g
ICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9k
ZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1
Y3R1cmUoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJl
U2V0KClbMF0pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKLSAgICAgICAgICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKEpJVENvbXBpbGVyOjpF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBleGl0S2luZCwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tT
dHJ1Y3R1cmUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMzIsNiArNTIzMiw4MSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
Tm9kZSogbm9kZSwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIEFTU0VS
VChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOworICAgIAorICAgIGlmIChub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAw
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxHUFJUZW1wb3Jhcnk+IHN0cnVjdHVyZTsKKyAgICAgICAgR1BSUmVnIHN0
cnVjdHVyZUdQUjsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZW1wR1BSID09IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8R1BSVGVtcG9y
YXJ5Pih0aGlzKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS0+Z3ByKCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gdGVtcEdQUjsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsr
aSkgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoV2Vha1N0cnVjdHVyZShKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+
c3RydWN0dXJlU2V0KClbaV0pKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUo
CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5v
ZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tT
dHJ1Y3R1cmUoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgIGNhc2UgQ2VsbFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZTogeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIGNlbGwuZ3ByKCksIEludmFsaWRHUFJS
ZWcpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjZWxsID0gbV9qaXQuYnJhbmNoSWZD
ZWxsKHZhbHVlUmVncyk7CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgdmFs
dWVSZWdzLCBub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKHZhbHVlUmVncywgdGVtcEdQUikpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBjZWxsLmxpbmso
Jm1faml0KTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHRlbXBHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewpAQCAt
NTYzNiw2ICs1NzExLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRn
ZSAKICAgICAoU3BlY3VsYXRlQ2VsbE9wZXJhbmQodGhpcywgZWRnZSkpLmdwcigpOwogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCit7Cisg
ICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb2sgPSBtX2ppdC5icmFuY2hJZkNlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygpKTsKKyAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihvcGVy
YW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKKyAgICBvay5saW5rKCZtX2ppdCk7Cit9CisK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCiB7CiAgICAg
aWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKQEAgLTU5MTYsNiArNjAwNyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIENl
bGxVc2U6CiAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2Up
OworICAgICAgICBicmVhazsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KGVkZ2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIxNSw2ICsyMjE1LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JO
dWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVUeXBlT2YoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5v
ZGUqLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOworICAgIHZvaWQgY29tcGlsZUNo
ZWNrU3RydWN0dXJlKE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsK
ICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkBAIC0yMzc0LDYgKzIzNzYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UpOwogICAgIHZvaWQgc3Bl
Y3VsYXRlQm9vbGVhbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAg
dm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVj
dChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UpOwogICAgIHZvaWQgc3Bl
Y3VsYXRlRmluYWxPYmplY3QoRWRnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw3ICszMTQsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAg
ICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAv
LyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4gdGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAg
ICAgICAgICAgaW5zZXJ0QmFycmllcldpdGhJbnZhbGlkRXhpdChtX25vZGVJbmRleCArIDEsIEVk
Z2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAg
ICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2No
KEVwb2NoKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAt
NDgxLDExICs0ODEsNiBAQCBwcml2YXRlOgogICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUlu
ZGV4LCBiYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4
aXQodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCi0gICAgewotICAgICAgICBpbnNlcnRC
YXJyaWVyKG5vZGVJbmRleCwgYmFzZSwgZmFsc2UpOwotICAgIH0KLQogICAgIHZvaWQgaW5zZXJ0
QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVl
KQogICAgIHsKICAgICAgICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBv
bmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIAorCiAgICAgLy8gSW4gbW9zdCBjYXNl
cywgd2hhdCB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXMgdmVyaWZ5IHdoZXRoZXIgdGhlIHNldCBp
cyB0b3Agb3IgY2xvYmJlcmVkLCBhbmQKICAgICAvLyBpZiBub3QsIGVudW1lcmF0ZSB0aGUgc2V0
IG9mIHN0cnVjdHVyZXMuIFVzZSB0aGlzIG9ubHkgaW4gY2FzZXMgd2hlcmUgdGhlIHNpbmdsZXRv
biBjYXNlIGlzCiAgICAgLy8gbWVhbmluZ2Z1bGx5IHNwZWNpYWwsIGxpa2UgZm9yIHRyYW5zaXRp
b25zLgpAQCAtMjAyLDYgKzIwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIG1fc2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAg
ICAgICAgbV9zZXQuZm9yRWFjaChmdW5jdG9yKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBLbm93bkNlbGxV
c2U6CiAgICAgICAgIG91dC5wcmludCgiS25vd25DZWxsIik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGxPck90aGVyIik7
CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgb3V0LnByaW50
KCJPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIGVudW0g
VXNlS2luZCB7CiAgICAgS25vd25Cb29sZWFuVXNlLAogICAgIENlbGxVc2UsCiAgICAgS25vd25D
ZWxsVXNlLAorICAgIENlbGxPck90aGVyVXNlLAogICAgIE9iamVjdFVzZSwKICAgICBGdW5jdGlv
blVzZSwKICAgICBGaW5hbE9iamVjdFVzZSwKQEAgLTEwOCw2ICsxMDksOCBAQCBpbmxpbmUgU3Bl
Y3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgY2FzZSBDZWxsVXNlOgogICAgIGNh
c2UgS25vd25DZWxsVXNlOgogICAgICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2FzZSBDZWxs
T3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsIHwgU3BlY090aGVyOwogICAgIGNh
c2UgT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKICAgICBjYXNlIEZ1bmN0
aW9uVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDkgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+dHJh
bnNpdGlvbigpLT5wcmV2aW91cy0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4LDcgQEAg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAg
IGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIENl
bGxPck90aGVyVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDIxICsyMDI2
LDU3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQog
ICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICAKICAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7CiAgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25z
dGFudENhY2hlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hl
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgCi0gICAgICAgIGNoZWNr
U3RydWN0dXJlKAotICAgICAgICAgICAgc3RydWN0dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxsKSwg
ZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBbdGhpc10gKFN0
cnVjdHVyZSogc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1
cmVJRChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
IGNhc2UgS25vd25DZWxsVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoZWNrU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0S2lu
ZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJl
SUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNlbGwgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRpb24iKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUo
bm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgY2hlY2tTdHJ1
Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZSh2YWx1ZSksCisgICAgICAgICAgICAgICAgZXhp
dEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVj
dHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENl
bGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1
ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlz
Tm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNo
ZWNrQ2VsbCgpCkBAIC00MDIyLDYgKzQwNTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxv
Y2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKworICAgICAgICAgICAgY2hlY2tJbmZl
cnJlZFR5cGUobV9ub2RlLT5jaGlsZDIoKSwgdmFsdWUsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKICAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewpAQCAtNTY3
NCw2ICs1NzEyLDEzNSBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwg
cmVzdWx0cyk7CiAgICAgfQorCisgICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2Us
IExWYWx1ZSB2YWx1ZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorICAg
IHsKKyAgICAgICAgLy8gVGhpcyBjYW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVj
aygpIGJlY2F1c2UgaXQgaXMgY2FsbGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Cisg
ICAgICAgIC8vCisgICAgICAgIC8vICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gbWF5IGJlIGxvd2VyZWQgdG86CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKSB7CisgICAgICAgIC8vICAgICBjYXNlIDQy
OgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOworICAg
ICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyAgICAgY2FzZSA0MzoKKyAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4s
IHR5cGUyKTsKKyAgICAgICAgLy8gICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVh
azsKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gd2hlcmUgdHlwZTEg
YW5kIHR5cGUyIGFyZSBkaWZmZXJlbnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhh
dCB0aGUgZWRnZSB3b3VsZCBiZQorICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUy
LCBpbnN0ZWFkIG9mIHR5cGUxIHwgdHlwZTIuCisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHR5
cGUua2luZCgpKSB7CisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok90aGVyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkludDMyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3ROdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJp
bmcodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNO
b3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBpZiAoIWFic3Ry
YWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5z
dHJ1Y3R1cmUoKSkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVk
VHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJj
aGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjb250aW51YXRpb24i
KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90
Q2VsbENhc2UpOworCisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlYWtT
dHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUo
CisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2Rl
KCksCisgICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IH5TcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdDoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVj
a0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNr
SW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNl
bGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgIGlzTm90T2JqZWN0KHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAg
ICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsK
KworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvYWRQ
cm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKQEAgLTc1MTQsNiArNzY4MSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVy
Lm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzU5NCw2ICs3
NzY0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGxvd0NlbGwoZWRnZSk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90Q2VsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiU3BlY3VsYXRlIENlbGxPck90aGVyIG5vdCBjZWxsIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JP
dGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1
ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaXNOb3RD
ZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhp
c05vdENlbGwsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVl
KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBz
cGVjdWxhdGVNYWNoaW5lSW50KEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghbV9pbnRl
cnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKQEAgLTgxMjcsNiArODMxMyw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlv
biA9PSBtX291dC5ib29sZWFuRmFsc2UpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
QVNTRVJUKG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5m
aW5hbGl6ZXItPm9zckV4aXQuc2l6ZSgpKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKQEAgLTgxMzUsOSArODMyNCwxNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZB
cmd1bWVudHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJl
ck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgICAgIAorCiAgICAgICAgIE9TUkV4
aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwogCisgICAgICAg
IGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5UcnVlKSB7CisgICAgICAgICAgICBl
bWl0T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRyOwogICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBudWxscHRyOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNzAgQEAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4mIEFzc2VtYgogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
fQogCitBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZO
b3RUeXBlKAorICAgIEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgQXNzZW1ibHlIZWxwZXJz
OjpKdW1wTGlzdCByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChqdW1w
KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAg
ICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ3MpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVncy5w
YXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVncykpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVh
bCwgcmVncy5wYXlsb2FkR1BSKCksIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIHJlZ3MucGF5bG9hZEdQUigpLCBk
ZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAg
IHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdChyZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgIEp1
bXAgb2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OnB1cmlmeU5hTihGUFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdE5hTiA9IGJyYW5jaERvdWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MTksNiArNzE5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAg
fQogCisgICAgSnVtcExpc3QgYnJhbmNoSWZOb3RUeXBlKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJl
ZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4
OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3Nyw3ICszNzcsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9
IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAg
ICAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0
KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UpCi0gICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICAgICAgJiYgIXN0
cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCisgICAgICAgICAgICAgICAg
JiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKIAogICAgICAg
ICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAgICAgICAgICAgICAgICAgICAgY29k
ZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzMsNiArNjMzLDggQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICBwY1s1XS51LnBvaW50ZXIgPSBudWxs
cHRyOyAvLyBvZmZzZXQKICAgICAgICAgcGNbNl0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gbmV3
IHN0cnVjdHVyZQogICAgICAgICBwY1s3XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBzdHJ1Y3R1
cmUgY2hhaW4KKyAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgPQorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihwY1s4XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRQZXJz
aXN0ZW50RmxhZ3NNYXNrKTsKICAgICAgICAgCiAgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBi
YXNlVmFsdWUuYXNDZWxsKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNl
bGwtPnN0cnVjdHVyZSgpOwpAQCAtNjYwLDEyICs2NjIsMTggQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzdd
LnUuc3RydWN0dXJlQ2hhaW4uc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2hhaW4pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3Mg
PSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoaWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxh
Z3MoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBw
Y1s0XS51LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgICAgICAgICAgICAgIHBj
WzVdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgcGNb
OF0udS5wdXRCeUlkRmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAgICAgICAg
ICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyB8CisgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcihpZGVudC5pbXBsKCkpLnB1dEJ5SWRG
bGFncygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTI2NSwxNCArMTI2NSw4OCBA
QCBfbGxpbnRfb3BfcHV0X2J5X2lkOgogICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoMSwgMykK
ICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDMpCiAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZUNlbGwodDMsIHQwLCAub3BQdXRCeUlkU2xvdykKLSAgICBsb2FkaSBKU0NlbGw6Om1fc3Ry
dWN0dXJlSURbdDBdLCB0MgotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MSkKLSAgICBi
aW5lcSB0MiwgdDEsIC5vcFB1dEJ5SWRTbG93CisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDQs
IHQyKQorICAgIGJpbmVxIHQyLCBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCAub3BQdXRCeUlk
U2xvdwogCiAgICAgIyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlOgotICAgICMgdDEsIHQyIC0+IGN1
cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0MiAtPiBjdXJyZW50IHN0cnVjdHVyZSBJRAogICAg
ICMgdDAgLT4gb2JqZWN0IGJhc2UKIAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MSkK
KyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MykKKworICAgIGxvYWRwRnJvbUluc3Ry
dWN0aW9uKDgsIHQxKQorCisgICAgIyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlOgorICAgICMgdDAg
LT4gb2JqZWN0IGJhc2UKKyAgICAjIHQxIC0+IHB1dCBieSBpZCBmbGFncworICAgICMgdDIgLT4g
Y3VycmVudCBzdHJ1Y3R1cmUgSUQKKyAgICAjIHQzIC0+IHZhbHVlIHRvIHB1dAorCisgICAgYnRw
bnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ssIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcgorCisgICAgIyBXZSBoYXZlIG9uZSBvZiB0aGUgbm9uLXN0cnVj
dHVyZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hpY2ggb25lLgorICAgIGFuZHAgUHV0QnlJZFNl
Y29uZGFyeVR5cGVNYXNrLCB0MQorICAgIGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3Ry
aW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmcKKworICAgICMgV2UgYXJlIG9u
ZSBvZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIE9iamVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCisg
ICAgYnBsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlk
VHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyCisKKyAgICAjIFdlIGFyZSBlaXRoZXIgT2Jq
ZWN0T3JPdGhlciBvciBUb3AuCisgICAgYnBlcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3As
IC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworCisgICAgIyBDaGVjayBpZiB3ZSBhcmUgT2Jq
ZWN0T3JPdGhlci4KKyAgICBidHF6IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2Jq
ZWN0Cisub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6CisgICAgYW5kcSB+VGFnQml0VW5kZWZpbmVk
LCB0MworICAgIGJxZXEgdDMsIFZhbHVlTnVsbCwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
CisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9i
amVjdE9yT3RoZXI6CisgICAgIyBXZSBhcmUgZWl0aGVyIFN0cmluZyBvciBPYmplY3QuCisgICAg
YnRxbnogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRTbG93CisgICAgYnBlcSB0MSwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVTdHJpbmcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3QKKyAgICBiYmVxIEpT
Q2VsbDo6bV90eXBlW3QzXSwgU3RyaW5nVHlwZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
CisgICAgam1wIC5vcFB1dEJ5SWRTbG93Cisub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0OgorICAg
IGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgLm9wUHV0QnlJZERvbmVDaGVj
a2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tM
ZXNzVGhhblN0cmluZzoKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9t
LCBCb29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJlcgorICAgIGJwbHQgdDEsIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbkludDMyCisKKyAgICAj
IFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyCisKKyAgICBicWFlcSB0
MywgdGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5v
cFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXI6CisgICAgYnRxbnogdDMs
IHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQ
dXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMjoKKyAgICAjIFdl
IGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlci4KKyAgICBi
cG5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuLCAub3BQdXRCeUlkVHlwZUNoZWNr
Qm90dG9tT3JPdGhlcgorICAgIHhvcnEgVmFsdWVGYWxzZSwgdDMKKyAgICBidHF6IHQzLCB+MSwg
Lm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5v
cFB1dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90aGVyOgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcgorICAgIGptcCAub3BQdXRC
eUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
CisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1
Y3R1cmUKKyAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcgorICAgIGptcCAub3BQdXRCeUlkU2xv
dworCisub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICB1cnNoaWZ0
cCAzLCB0MQorICAgIGJpbmVxIHQxLCBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDNdLCAub3BQdXRC
eUlkU2xvdworCisub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXM6CiAgICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDYsIHQxKQogICAgIAogICAgIGJ0aXogdDEsIC5vcFB1dEJ5SWROb3RUcmFuc2l0
aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2
ICsyMDQsMjIgQEAgZWxzZQogICAgIGNvbnN0IExvd2VzdFRhZyA9IERlbGV0ZWRWYWx1ZVRhZwog
ZW5kCiAKKyMgTk9URTogVGhlIHZhbHVlcyBiZWxvdyBtdXN0IGJlIGluIHN5bmMgd2l0aCB3aGF0
IGlzIGluIFB1dEJ5SWRGbGFncy5oLgorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9IDB4
NgorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwCitjb25zdCBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyCitjb25zdCBQdXRCeUlkUHJpbWFy
eVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9IDB4NAorY29uc3QgUHV0QnlJZFNlY29u
ZGFyeVR5cGVNYXNrID0gLTB4OAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20gPSAw
eDAKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiA9IDB4OAorY29uc3QgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50
MzIgPSAweDE4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciA9IDB4MjAKK2NvbnN0
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOAorY29uc3QgUHV0QnlJZFNlY29uZGFy
eVR5cGVPYmplY3QgPSAweDMwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3Ro
ZXIgPSAweDM4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKKwogY29uc3Qg
Q2FsbE9wQ29kZVNpemUgPSA5CiAKIGlmIFg4Nl82NCBvciBBUk02NCBvciBDX0xPT1AKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkluZmVycmVkVHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19pbmZvID0geyAiSW5mZXJy
ZWRUeXBlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGUpIH07CisKK0lu
ZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVk
VHlwZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlPih2
bS5oZWFwKSkgSW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBzdGF0aWNf
Y2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGUtPkluZmVycmVkVHlw
ZTo6fkluZmVycmVkVHlwZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZTo6Y3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9
IGpzQ2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKworICAgIGlmIChpbmZlcnJlZFR5cGUtPm1f
c3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJmlu
ZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUtPm1fZmluYWxpemVyKTsKK30KKworSW5mZXJyZWRUeXBl
OjpLaW5kIEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyBmbGFncykKK3sK
KyAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBlTWFzaykgeworICAgIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAgICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0
QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5
cGVCb3R0b206CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOworICAgICAgICBjYXNlIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFuOworICAg
ICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXI6CisgICAgICAgICAgICByZXR1cm4g
T3RoZXI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMjoKKyAgICAgICAg
ICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJl
cjoKKyAgICAgICAgICAgIHJldHVybiBOdW1iZXI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29u
ZGFyeVR5cGVTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAgICBjYXNl
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIE9iamVjdDsK
KyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXI6CisgICAgICAg
ICAgICByZXR1cm4gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5
VHlwZVRvcDoKKyAgICAgICAgICAgIHJldHVybiBUb3A7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
IEJvdHRvbTsKKyAgICAgICAgfQorICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgcmV0dXJuIE9iamVjdFdpdGhTdHJ1Y3R1cmU7CisgICAgY2Fz
ZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
cmV0dXJuIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBCb3R0b207Cisg
ICAgfQorfQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yOjpmb3JWYWx1ZShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4o
KSkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQor
ICAgICAgICByZXR1cm4gSW50MzI7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAg
IHJldHVybiBOdW1iZXI7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlc2NyaXB0b3Io
T2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgcmV0
dXJuIE9iamVjdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVG9wOworfQorCitJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpmb3JGbGFncyhW
TSYgdm0sIFB1dEJ5SWRGbGFncyBmbGFncykKK3sKKyAgICBLaW5kIGtpbmQgPSBraW5kRm9yRmxh
Z3MoZmxhZ3MpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOworICAgIGlmIChoYXNTdHJ1Y3R1
cmUoa2luZCkpCisgICAgICAgIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpOworICAgIGVsc2UKKyAgICAgICAgc3RydWN0
dXJlID0gbnVsbHB0cjsKKyAgICByZXR1cm4gRGVzY3JpcHRvcihraW5kLCBzdHJ1Y3R1cmUpOwor
fQorCitQdXRCeUlkRmxhZ3MgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpwdXRCeUlkRmxhZ3Mo
KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNl
Y29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tKTsKKyAgICBjYXNlIEJvb2xlYW46
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5
VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbik7CisgICAgY2FzZSBP
dGhlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFBy
aW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcik7CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJ
ZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMik7CisgICAg
Y2FzZSBOdW1iZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyKTsK
KyAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFn
cz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJp
bmcpOworICAgIGNhc2UgT2JqZWN0OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJ
ZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU9iamVjdCk7CisgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlk
U2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIpOworICAgIGNhc2UgVG9wOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkg
fCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCk7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAgICAgICAgICAg
IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmUgfCBlbmNvZGVTdHJ1Y3R1cmVJ
RChtX3N0cnVjdHVyZS0+aWQoKSkpOworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAgICAgICAg
ICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgfCBlbmNvZGVT
dHJ1Y3R1cmVJRChtX3N0cnVjdHVyZS0+aWQoKSkpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQdXRCeUlkTm9uZTsKK30KKwordm9pZCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKQorewor
ICAgIC8vIEZpbHRlciBvdXQgY29tbW9uIHRoaW5ncyB0byBzaW1wbGlmeSB0aGUgc3dpdGNoIHN0
YXRlbWVudCBiZWxvdy4KKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAob3RoZXIubV9raW5kID09IEJvdHRvbSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgKnRoaXMgPSBvdGhl
cjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICBjYXNlIFN0cmluZzoK
KyAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE90aGVyOgor
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAg
ICAgICAgICAqdGhpcyA9IERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIG90
aGVyLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmpl
Y3Q6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2Jq
ZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
Y2FzZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBOdW1iZXI6CisgICAgICAgICAgICAqdGhpcyA9IE51bWJlcjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHN3aXRjaCAo
b3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAg
ICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlOiAvLyBJZiB3ZSBzZWUgdGhpcyBoZXJlLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgc3RydWN0
dXJlcyBkaWRuJ3QgbWF0Y2guCisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgKnRo
aXMgPSBPYmplY3Q7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIu
bV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0
T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVy
OgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3Ro
ZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAg
ICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOiAvLyBJZiB3ZSBzZWUgdGhpcyBoZXJlLCB0aGVuIHdlIGtub3cgdGhh
dCB0aGUgc3RydWN0dXJlcyBkaWRuJ3QgbWF0Y2guCisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhl
cjoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7
CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBP
YmplY3RPck90aGVyOgorICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBP
YmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT3Ro
ZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAq
dGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgVG9w
OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92ZVN0cnVjdHVy
ZSgpCit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1
cmU6CisgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworYm9vbCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNvbnN0IERlc2Ny
aXB0b3ImIG90aGVyKSBjb25zdAoreworICAgIERlc2NyaXB0b3IgbWVyZ2VkID0gKnRoaXM7Cisg
ICAgbWVyZ2VkLm1lcmdlKG90aGVyKTsKKyAgICByZXR1cm4gKnRoaXMgPT0gbWVyZ2VkOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9r
aW5kKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91dC5wcmludCgiOiIsIGluQ29u
dGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250
ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRUeXBlKFZNJiB2
bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAs
IG1fd2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVycmVkVHlwZTo6
fkluZmVycmVkVHlwZSgpCit7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImIGV4cGVjdGVk
KQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9wKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9PSBleHBlY3RlZDsKK30K
KworYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImIGV4cGVjdGVk
KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJu
IGNhbldhdGNoKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRk
V2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQq
IHdhdGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpLmtp
bmQoKSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0LmFkZCh3YXRjaHBvaW50KTsKK30K
Kwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIGFkZFdh
dGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0
aGlzKSwgIjoiLCBkZXNjcmlwdG9yKCkpOworfQorCitib29sIEluZmVycmVkVHlwZTo6d2lsbFN0
b3JlVmFsdWVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIERlc2NyaXB0b3IgbXlUeXBlID0gZGVzY3JpcHRv
cihsb2NrZXIpOworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBlID0gRGVzY3JpcHRvcjo6Zm9yVmFs
dWUodmFsdWUpOworCisgICAgbXlUeXBlLm1lcmdlKG90aGVyVHlwZSk7CisKKyAgICBBU1NFUlQo
ZGVzY3JpcHRvcihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRoZSB0eXBlIG11c3QgaGF2ZSBjaGFu
Z2VkIGlmIHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAgICBzZXQobG9ja2VyLCB2bSwgbXlU
eXBlKTsKKworICAgIHJldHVybiBraW5kKGxvY2tlcikgIT0gVG9wOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgc2V0KGxvY2tlciwgdm0sIFRvcCk7Cit9CisKK3ZvaWQgSW5m
ZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBWTSYgdm0s
IERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sKKyAgICAvLyBXZSB3aWxsIHRyaWdnZXIgd3Jp
dGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3cml0ZSBiYXJy
aWVycyBkb24ndCBHQywgYnV0IHRoYXQKKyAgICAvLyBjb3VsZCBjaGFuZ2UuIElmIGl0IGRvZXMs
IHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIHVzZWQK
KyAgICAvLyBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGluIHRoZSBjYWxsZXIsIGJ1dCB0aGUg
Y2FsbGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1heWJlIHRoYXQgd291bGRuJ3QgYmUKKyAgICAv
LyBhIGdvb2QgaWRlYS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgCisgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBub3QgcmVhbGx5IGNoYW5naW5nIHRo
ZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCisgICAgaWYgKGRlc2Ny
aXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGUgbmV3IGRlc2NyaXB0b3IgbXVzdCBiZSBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgcHJldmlv
dXMgb25lLgorICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN1YnN1bWVzKGRlc2NyaXB0b3IobG9j
a2VyKSkpOworCisgICAgLy8gSWYgdGhlIG5ldyBkZXNjcmlwdG9ycyBoYXZlIGRpZmZlcmVudCBz
dHJ1Y3R1cmVzLCB0aGVuIGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugb25lIGlzIG51bGwuCisgICAg
aWYgKGRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSAhPSBuZXdEZXNjcmlwdG9yLnN0cnVj
dHVyZSgpKQorICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSB8
fCAhbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisKKyAgICAvLyBXZSBhcmUgY2hhbmdpbmcg
dGhlIHR5cGUsIHNvIG1ha2Ugc3VyZSB0aGF0IGlmIGFueW9uZSB3YXMgd2F0Y2hpbmcsIHRoZXkg
ZmluZCBvdXQgYWJvdXQgaXQgbm93LiBJZgorICAgIC8vIGFueW9uZSBpcyB3YXRjaGluZywgd2Ug
bWFrZSBzdXJlIHRvIGdvIHRvIFRvcCBzbyB0aGF0IHdlIGRvbid0IGRvIHRoaXMgc29ydCBvZiB0
aGluZyBhZ2Fpbi4KKyAgICBpZiAobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gQ2xlYXJXYXRj
aHBvaW50KSB7CisgICAgICAgIC8vIFdlIGNhbm5vdCBoYXZlIGJlZW4gaW52YWxpZGF0ZWQsIHNp
bmNlIGlmIHdlIHdlcmUsIHRoZW4gd2UnZCBhbHJlYWR5IGJlIGF0IFRvcC4KKyAgICAgICAgQVNT
RVJUKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpOworCisgICAgICAg
IC8vIFdlJ3JlIGFib3V0IHRvIGRvIGV4cGVuc2l2ZSB0aGluZ3MgYmVjYXVzZSBzb21lIGNvbXBp
bGVyIHRocmVhZCBkZWNpZGVkIHRvIHdhdGNoIHRoaXMgdHlwZSBhbmQKKyAgICAgICAgLy8gdGhl
biB0aGUgdHlwZSBjaGFuZ2VkLiBBc3N1bWUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIGNyYXp5LCBh
bmQgZG9uJ3QgZXZlciBkbyBhbnkgbW9yZSB0aGluZ3MgZm9yCisgICAgICAgIC8vIGl0LgorICAg
ICAgICBuZXdEZXNjcmlwdG9yID0gVG9wOworCisgICAgICAgIG1fd2F0Y2hwb2ludFNldC5maXJl
QWxsKCJJbmZlcnJlZCB0eXBlIGNoYW5nZWQiKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhl
IG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisg
ICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBtX3N0cnVjdHVyZSA9
IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlm
IHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkgewor
ICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhZ3Jl
ZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAgICAgICAgIEFTU0VSVChu
ZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlx
dWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25X
YXRjaHBvaW50KCZtX3N0cnVjdHVyZS0+bV93YXRjaHBvaW50KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRvciBraW5kLgorICAgIG1fa2luZCA9
IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAgLy8gQXNzZXJ0IHRoYXQgd2UgZGlkIHRoaW5n
cy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBWTSYgdm0gPSAq
SGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgCisgICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yID0gZGVzY3JpcHRv
cihsb2NrZXIpOworICAgIG5ld0Rlc2NyaXB0b3IucmVtb3ZlU3RydWN0dXJlKCk7CisgICAgCisg
ICAgc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlw
ZTo6SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURl
dGFpbCYpCit7CisgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KKyAg
ICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCisgICAgICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJl
LCBtX3dhdGNocG9pbnQpKTsKKworICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVt
b3ZlU3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVy
ZUZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIEluZmVycmVkU3Ry
dWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJl
ZFN0cnVjdHVyZSo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9C
SkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgbV9maW5hbGl6ZXIpKTsKKworICAgIEFT
U0VSVChIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQpKTsKKyAgICAK
KyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGluZmVycmVkU3RydWN0dXJlLT5tX3N0cnVjdHVyZS5n
ZXQoKSkpCisgICAgICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0
dXJlKCk7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3Ry
dWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBhcmVudCwg
c3RydWN0dXJlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBJbmZlcnJlZFR5cGU6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBvdXQucHJpbnQoIkJvdHRv
bSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Cisg
ICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk90aGVyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIG91dC5wcmlu
dCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1i
ZXI6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1
cmU6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBvdXQu
cHJpbnQoIk9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgb3V0LnBy
aW50KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBl
X2gKKworI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgi
CisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNlZCBmb3IgdGhlIGluZmVy
ZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCisKK2NsYXNzIEluZmVycmVk
VHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxs
IEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBlbnVt
IEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAorICAgICAgICBCb29sZWFuLAorICAg
ICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3Ry
aW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAgICAgICBPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBPYmplY3RPck90aGVyLAor
ICAgICAgICBUb3AKKyAgICB9OworCisgICAgc3RhdGljIEtpbmQga2luZEZvckZsYWdzKFB1dEJ5
SWRGbGFncyk7CisgICAgCisgICAgc3RhdGljIGJvb2wgaGFzU3RydWN0dXJlKEtpbmQga2luZCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIERlc2NyaXB0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgRGVzY3JpcHRvcigpCisgICAgICAgICAgICA6IG1fa2luZChCb3R0
b20pCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIERlc2NyaXB0b3IoS2luZCBraW5kLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG51bGxwdHIpCisgICAgICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAgICAgLCBt
X3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoYXNTdHJ1
Y3R1cmUoa2luZCkpCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAg
ICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7CisKKyAg
ICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2tpbmQgIT0gQm90dG9tIHx8IG1fc3RydWN0dXJlOworICAgICAgICB9CisK
KyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAg
ICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzKCkgY29uc3Q7CisKKyAgICAgICAgQUxXQVlT
X0lOTElORSBib29sIGluY2x1ZGVzVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQm90dG9tOgorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7CisgICAgICAgICAgICBjYXNl
IE90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
OworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUu
aXNJbnQzMigpOworICAgICAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmlzTnVtYmVyKCk7CisgICAgICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYg
dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlOworICAgICAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQorICAgICAgICAgICAgICAgICAgICB8fCAodmFsdWUu
aXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlKTsK
KyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5p
c09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IHZhbHVlLmlzT2JqZWN0KCk7
CisgICAgICAgICAgICBjYXNlIFRvcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNjcmlwdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhl
ci5tX2tpbmQKKyAgICAgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVj
dHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNjcmlw
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhh
c2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAg
IH0KKyAgICAKKyAgICAgICAgdm9pZCBtZXJnZShjb25zdCBEZXNjcmlwdG9yJik7CisgICAgICAg
IHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
aXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb3RoZXIgb25lLgorICAgICAg
ICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBjb25zdDsKKworICAgICAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAg
IEtpbmQgbV9raW5kOworICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIH07CisK
KyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jazsgfQor
CisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUt
PnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAgIERlc2NyaXB0b3IgZGVz
Y3JpcHRvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgIH0KKyAgICBEZXNjcmlwdG9yIGRl
c2NyaXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICB9Cisg
ICAgCisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29u
c3QgeyByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKTsgfQorCisgICAgYm9vbCBpc1Rv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBUb3A7IH0KKyAgICBib29sIGlzUmVsZXZhbnQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIEluZmVycmVkVHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0
J3Mgbm90IHJlbGV2YW50IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxs
U3RvcmVWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBEZXNjcmlw
dG9yIGN1cnJlbnREZXNjcmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICAgICAg
aWYgKGN1cnJlbnREZXNjcmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnREZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAgIHJldHVybiB3
aWxsU3RvcmVWYWx1ZVNsb3codm0sIHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBJbW1lZGlhdGVs
eSBtYWtlcyB0aGlzIHR5cGUgaXJyZWxldmFudC4KKyAgICB2b2lkIG1ha2VUb3AoVk0mIHZtKQor
ICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1ha2VUb3BTbG93KHZtKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3Vy
cmVudGx5IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRl
c2NyaXB0b3IuIE5vdGUgdGhhdAorICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNl
IGZvciBUb3AuCisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBs
b2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2Ny
aXB0b3ImKTsKKyAgICAKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdh
dGNocG9pbnQqKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2
YXRlOgorICAgIEluZmVycmVkVHlwZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAg
IGJvb2wgd2lsbFN0b3JlVmFsdWVTbG93KFZNJiwgSlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9w
U2xvdyhWTSYpOworICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYs
IERlc2NyaXB0b3IpOworICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxl
IENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRv
bSB9OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdh
dGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBv
aW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25z
dCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIEluZmVycmVkU3Ry
dWN0dXJlRmluYWxpemVyIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIoKSB7IH0KKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsK
KyAgICB9OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgeworICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJl
KFZNJiwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOworCisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH07CisK
KyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRUeXBlOworICAgICAg
ICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OworICAgICAgICBmcmll
bmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXI7CisgICAgICAgIAorICAgICAgICBJ
bmZlcnJlZFR5cGUqIG1fcGFyZW50OworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3N0cnVjdHVyZTsKKworICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgbV93YXRj
aHBvaW50OworICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplciBtX2ZpbmFsaXplcjsK
KyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKKworICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNm
b3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCisgICAg
Ly8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlh
bGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKKyAgICAvLyB0aHJl
YWQuIFRoZSBERkcgd2lsbCB1c2UgdGhlIEluZmVycmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBp
dCB3YXRjaGVzLgorICAgIElubGluZVdhdGNocG9pbnRTZXQgbV93YXRjaHBvaW50U2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkluZmVycmVkVHlwZTo6S2luZCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19p
bmZvID0geyAiSW5mZXJyZWRUeXBlVGFibGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKElu
ZmVycmVkVHlwZVRhYmxlKSB9OworCitJbmZlcnJlZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFi
bGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHJlc3VsdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZVRhYmxlPih2bS5oZWFwKSkgSW5m
ZXJyZWRUeXBlVGFibGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9
IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBl
VGFibGUtPkluZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKTsKK30KKworU3Ry
dWN0dXJlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
Q2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGVUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IGpzQ2FzdDxJ
bmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoaW5mZXJyZWRUeXBlVGFibGUtPm1fbG9jayk7CisgICAgCisgICAgZm9yIChhdXRvJiBlbnRy
eSA6IGluZmVycmVkVHlwZVRhYmxlLT5tX3RhYmxlKSB7CisgICAgICAgIGlmICghZW50cnkudmFs
dWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1Jl
bGV2YW50KCkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS52YWx1ZS5jbGVhcigpOworICAgIH0KK30KKwor
SW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIGF1dG8gaXRlciA9IG1fdGFi
bGUuZmluZCh1aWQpOworICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZh
bHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFRha2UgdGhpcyBvcHBvcnR1
bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBlcy4KKyAgICBpZiAoIWl0ZXItPnZhbHVlLT5p
c1JlbGV2YW50KCkpIHsKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOworfQor
CitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJl
dHVybiBnZXQobG9ja2VyLCB1aWQpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRh
YmxlOjpnZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gZ2V0KHBy
b3BlcnR5TmFtZS51aWQoKSk7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9y
ZVZhbHVlKAorICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVy
ZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhh
c2ggbWFwLgorICAgIAorICAgIGlmIChhZ2UgPT0gT2xkUHJvcGVydHkpIHsKKyAgICAgICAgVGFi
bGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5kKHByb3BlcnR5TmFtZS51aWQoKSk7
CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgorICAg
ICAgICAKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgdmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpdGVyLT52YWx1
ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVGFibGVUeXBl
OjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1l
LnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0g
SW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhpcywgaW5mZXJyZWRU
eXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPndpbGxT
dG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3AoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgLy8gVGhlIGFsZ29yaXRobSBo
ZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUg
aGFzaCBtYXAuCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0eSkgeworICAgICAgICBUYWJsZVR5
cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAg
ICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAg
ICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3AuCisKKyAgICAgICAgaXRl
ci0+dmFsdWUtPm1ha2VUb3Aodm0pOworICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0Owor
ICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8
SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFr
ZVRvcCh2bSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworfQorCitJbmZl
cnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFibGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwg
dm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCit7Cit9CisKK0luZmVycmVkVHlw
ZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5
cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVy
cmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAi
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2Vs
bC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBm
b3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZp
ZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVzdHJ1Y3RvciBhbmQgbWFrZXMgbGlmZXR5cGUgZWFzaWVy
IHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQg
dGhpcyB0aGluZworLy8gY2Fubm90IGJlIGRlbGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5n
LiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVydHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVy
dGllcworLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZlcnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVy
dGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisv
LyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21lIFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdp
bGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlwZXMgb2YgcHJvcGVydGllcyBmcm9tCisvLyBkaWZm
ZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRoZSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2lu
dCBzZXRzIG9mIG9iamVjdHMuCisKK2NsYXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0
YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3Ry
dWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgQ29uY3VycmVudEpJVExv
Y2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQg
aW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBib3RoIFRvcCBhbmQgQm90dG9tLiBO
dWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKKyAgICAvLyBvd25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qg
a25vdyBhYm91dCB0aGUgcHJvcGVydHkuCisgICAgSW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBl
KiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChQcm9wZXJ0
eU5hbWUpOworCisgICAgZW51bSBTdG9yZWRQcm9wZXJ0eUFnZSB7CisgICAgICAgIE5ld1Byb3Bl
cnR5LAorICAgICAgICBPbGRQcm9wZXJ0eQorICAgIH07CisgICAgCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwgcmVsZXZh
bnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8vIHJlbGV2YW50IGlmIGl0J3MgVG9w
LiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVudHJpZXMu
CisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgU3Rv
cmVkUHJvcGVydHlBZ2UpOworCisgICAgLy8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRoZSBw
cm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBjb250
ZXh0LgorICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlB
Z2UpOworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVy
cmVkVHlwZVRhYmxlKCk7CisKKyAgICAvLyBCb3R0b206IGFic2VuY2UgZnJvbSB0YWJsZS4KKyAg
ICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1ZS0+aXNSZWxldmFudCgpLCBvciBh
YnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8KKyAgICAvLyBXZSBrbm93IGhvdyB0byBkZXRlcm1p
bmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0b20gb3IgdG9wIGRlcGVuZGluZyBv
biB3aGV0aGVyIHRoZQorICAgIC8vIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIG93bmluZyBz
dHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSwgYWJzZW5jZSBtYXkg
aGF2ZQorICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRoaXMgY2xhc3Mg
ZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkK
KyAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhY3Rpb25zOiByZXBsYWNl
IG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5ldyBwcm9wZXJ0eQorICAgIC8vICh0
cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRvbS4gSWYgd2UncmUgc3RvcmluZyB0
byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSwgdGhlbgorICAgIC8vIGFic2VuY2UgbWVh
bnMgdG9wLiBUbyBtYWtlIHRoaXMgd29yaywgd2UgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHRoZSBj
YXNlIHdoZXJlIHR3byBzdHJ1Y3R1cmVzLCBTMSBhbmQKKyAgICAvLyBTMiwgc2hhcmUgdGhlIHNh
bWUgSW5mZXJyZWRUeXBlVGFibGUgYW5kIG5laXRoZXIgb2YgdGhlbSBpbml0aWFsbHkga25vdyBh
Ym91dCBwcm9wZXJ0eSBQLiBTMSBtYXkKKyAgICAvLyB3YW50IHRvIGFkZCBQIHdpdGhvdXQgYSB0
eXBlLCB3aGlsZSBTMiBtYXkgd2FudCB0byBhZGQgUCB3aXRoIGEgdHlwZS4gSWYgUzEgYWRkZWQg
UCBhbmQgdXNlZCBhYnNlbmNlCisgICAgLy8gdG8gaW5kaWNhdGUgVG9wLCB0aGVuIFMyIHdvdWxk
IHVzZSB0aGF0IGFic2VuY2UgdG8gbWVhbiBCb3R0b20gYW5kIHdvdWxkIGVuZCB1cCBjcmVhdGlu
ZyBhIG5vbi1Ub3AKKyAgICAvLyBlbnRyeSBpbiB0aGUgdGFibGUuIFRoZW4gUzEgd291bGQgZm9y
Z2V0IHRoYXQgaXQgd2FudGVkIFRvcCwgYW5kIHdvdWxkIHVzZSBTMidzIHR5cGUuIENsZWFybHks
CisgICAgLy8gdGhhdCdzIGJhZC4gV2UgYXZvaWQgc3VjaCBjb25mdXNpb24gYnkgZW5zdXJpbmcg
dGhhdCBhIHRyYW5zaXRpb24gYWx3YXlzIGFkZHMgYW4gZW50cnkuIEhlbmNlLAorICAgIC8vIGFi
c2VuY2UtbWVhbnMtYm90dG9tIG9ubHkgY29tZXMgaW50byBwbGF5IGZvciBwcm9wZXJ0aWVzIGFk
ZGVkIGJlZm9yZSB0aGUgSW5mZXJyZWRUeXBlVGFibGUgd2FzCisgICAgLy8gY3JlYXRlZC4KKyAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgV3JpdGVCYXJyaWVy
PEluZmVycmVkVHlwZT4sIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFVuaXF1ZWRTdHJp
bmdJbXBsKj4+IFRhYmxlVHlwZTsKKyAgICAKKyAgICBUYWJsZVR5cGUgbV90YWJsZTsKKworICAg
IC8vIFdlIG9ubHkgZ3JhYiB0aGlzIGxvY2sgd2hlbiB3ZSdyZSBkb2luZyBtb2RpZmljYXRpb25z
IG9uIHRoZSBtYWluIHRocmVhZCwgb3IgcmVhZHMgb24gdGhlIGNvbXBpbGVyCisgICAgLy8gdGhy
ZWFkLiBUaGUgY29tcGlsZXIgdGhyZWFkIGlzIG5vdCBhbGxvd2VkIHRvIGRvIG1vZGlmaWNhdGlv
bnMuCisgICAgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTg5LDYgKzExODksOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAg
aWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1
cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTEyMjcsMjkgKzEyMjksNDAgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3Ry
dWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgeworICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4
aXN0aW5nU3RydWN0dXJlKAorICAgICAgICBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgb2Zmc2V0KTsKKyAgICBpZiAobmV3U3RydWN0dXJlKSB7CisgICAgICAgIG5ld1N0cnVj
dHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAgICAgICAgICAgdm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJ
ZCk7CisgICAgICAgIAogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmIChjdXJy
ZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHks
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+
aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwg
b2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdW5zaWduZWQgY3VycmVudEF0
dHJpYnV0ZXM7Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
Y3VycmVudEF0dHJpYnV0ZXMpOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBo
YXNJbmZlcnJlZFR5cGUpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAg
ICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFk
T25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRp
ZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJy
ZWRUeXBlKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJlcGxh
Y2UoCisgICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4
dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIH0KKwogICAgICAgICBz
bG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcHV0RGlyZWN0
KHZtLCBvZmZzZXQsIHZhbHVlKTsKIApAQCAtMTI2OCwxNiArMTI4MSwxOSBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgLy8gd2Ugd2FudC4KICAgICBEZWZl
cnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRG
aXJlOwogICAgIAotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90
LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOworICAgIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZl
cnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9y
VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4
dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZz
ZXQob2Zmc2V0KTsKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OwotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0
cnVjdHVyZSk7CisgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQp
KTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBu
ZXdTdHJ1Y3R1cmUpOwogCiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICBz
bG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkKLSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGll
cygpOworICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVz
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzMzUsOCArMTM1MSwxMSBAQCBpbmxpbmUg
dm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxH
cm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZM
aW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVy
ZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKKyAgICBib29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7CisgICAgc3Ry
dWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNob3VsZE9wdGltaXplKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MCwxMSArMzUwLDE1IEBAIHZvaWQgU3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBlbHNlCiAgICAgICAgIHByb3Bl
cnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKIAorICAgIEluZmVycmVkVHlwZVRhYmxl
KiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworCiAgICAgZm9yIChzaXpl
X3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0
cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3Ry
dWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1
Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOworICAgICAgICBpZiAodHlwZVRhYmxlICYm
IHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCisgICAg
ICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOwogICAgICAgICBwcm9wZXJ0eVRh
YmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0
TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNDY0LDYgKzQ2OCw3IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRy
aWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OworICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0TWF5QmVO
dWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkp
OwogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMpOwogCkBAIC00NzksNiArNDg0LDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXQKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogeworICAgIC8vIE5PVEU6IFRoZXJlIGFy
ZSBzb21lIGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRpcmVjdGx5IHRvIHVuY2FjaGVhYmxl
IGRpY3Rpb25hcnkgcmF0aGVyIHRoYW4KKyAgICAvLyBjYWNoaW5nIHRoZSByZW1vdmFsLiBXZSBj
YW4gZml4IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBtdXN0IHJlbWVtYmVyIHRvIGRvIHNv
LCBpZiB3ZSBldmVyIHRyeQorICAgIC8vIHRvIG9wdGltaXplIHRoaXMgY2FzZS4KKyAgICAvLwor
ICAgIC8vIC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkgc3RlYWwgdGhlIHByb3BlcnR5IHRh
YmxlLCBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkKKyAgICAv
LyAgIGNhbiBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxvb2tpbmcgYXQgcGFzdCB0cmFuc2l0
aW9ucy4gVGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFibGUgb25seQorICAgIC8vICAgZ3Jl
dyBhbmQgbmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92YWxzLCB3ZSdkIGhhdmUgdG8gY2hh
bmdlIHRoZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRpb24KKyAgICAvLyAgIGNvZGUgdG8g
aGFuZGxlIGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dpYyB0byBnZXQgdGhlIGxpc3Qgb2Yg
cHJvcGVydGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0CisgICAgLy8gICBsYWNrcyBhIHByb3BlcnR5
IHRhYmxlIGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2ggdGhlIHNldCBvZiB0cmFuc2l0aW9u
cyBzaW5jZSB0aGUgbGFzdAorICAgIC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEgcGlubmVkIHRh
YmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZSBj
YWNoZWQKKyAgICAvLyAgIHJlbW92YWxzLgorICAgIC8vCisgICAgLy8gLSBJbmZlcnJlZFR5cGVU
YWJsZSBhc3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIgaGFwcGVuZWQuIFRoaXMgaXMgaW1w
b3J0YW50IHNpbmNlIGlmIHdlIGNvdWxkCisgICAgLy8gICByZW1vdmUgYSBwcm9wZXJ0eSBhbmQg
dGhlbiByZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNlbmNlIG1lYW5zIHRvcCIgb3B0aW1p
emF0aW9uIHdvdWxkbid0CisgICAgLy8gICB3b3JrIGFueW1vcmUsIHVubGVzcyByZW1vdmFsIGFs
c28gZWl0aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChieSBkb2luZyBzb21ldGhpbmcgZXF1
aXZhbGVudCB0bworICAgIC8vICAgaGFzQmVlbkRpY3Rpb25hcnkpIG9yIGJ5IHN0cm9uZ2x5IG1h
cmtpbmcgdGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0aGF0IGl0IGlzIG5vdCBhYnNlbnQs
IGJ1dAorICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBlbnRyeS4KKyAgICAKICAgICBBU1NF
UlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAKICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSk7CkBAIC04NDEsNiArODY0LDQzIEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNo
aW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVlKTsK
IH0KIAordm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygKKyAgICBWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1p
emUsCisgICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAg
ICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOworICAgIEFTU0VSVCghaGFzQmVlbkRpY3Rpb25hcnko
KSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5cGUgdGFibGUgYmVmb3JlIGRvaW5n
IGFueXRoaW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0MgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5
CisgICAgLy8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUgcHJvcGVydHkgbWFwLgorICAgIElu
ZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisgICAg
aWYgKCF0YWJsZSkgeworICAgICAgICB0YWJsZSA9IEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUo
dm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2luZmVycmVk
VHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRoaXMgb25s
eSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxl
KiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2
bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRl
ciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQg
d2FzIHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0
YWJsZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisgICAgLy8gLi4uIGFuZCB0
aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5
ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgQVNTRVJUKGVu
dHJ5KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAgZW50cnktPmhhc0luZmVy
cmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YWdlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFt
ZSwgYWdlKTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOworICAgIH0K
K30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVydHlNYXBIYXNoVGFibGVT
dGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0xMDU4LDYgKzExMTgsOCBA
QCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIH0gZWxz
ZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJD
bGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIklu
ZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgpA
QCAtODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlxdWVk
U3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1aW50OF90
IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVzIHdo
ZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5cGUgaW4gdGhlIGluZmVy
cmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hlY2sgaW4gSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVudHJ5KCkKICAgICAgICAg
OiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAg
LCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsK
ICAgICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsK
ICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwg
YXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMpOwog
ICAgIH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBn
ZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldChW
TSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVk
VHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9kLiBJ
dCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAgICAg
Ly8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhlIGxv
Y2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ4MSw2ICs0ODYsNDAgQEAg
cHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9w
ZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBl
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVycmVkVHlwZVRhYmxlOwor
ICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0g
bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS0+Z2V0
KHVpZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBpbmZlcnJl
ZFR5cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmRlc2NyaXB0b3IoKTsK
KyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRp
bWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICghc2hvdWxk
T3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3Vs
ZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6TmV3UHJvcGVydHkpOworICAgIH0KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAorICAgICAgICBWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
T3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6Ok9sZFByb3BlcnR5
KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNo
YXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1
cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRp
b25zCkBAIC02MzIsNiArNjcxLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0
Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgd2lsbFN0b3JlVmFsdWVTbG93KAorICAgICAgICBWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlKTsKKwogICAgIHN0
YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNv
bnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApA
QCAtNjU1LDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRo
cm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBh
bm90aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2lu
ZmVycmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJh
bnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGlu
ZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lv
biAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsMTkgKzc1LDE5IEBAIGlubGluZSBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRh
YmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlU
YWJsZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxpZE9m
ZnNldDsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0
KHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6
IGludmFsaWRPZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0lu
ZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IGhhc0luZmVycmVkVHlwZSk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJu
IGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworfQor
CitBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0lu
ZmVycmVkVHlwZSkKK3sKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCkBAIC0xMDEsNiAr
MTAxLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmli
dXRlczsKKyAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlOwogICAg
IHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJI
b3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
SlNBUElWYWx1ZVdyYXBwZXIuaCIKQEAgLTI0MSw2ICsyNDIsOCBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVj
dHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJl
ZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJl
ZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25SYXJlRGF0YVN0cnVj
dHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFeGNlcHRp
b246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9taXNlRGVm
ZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDggQEAgcHVibGljOgogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRW
YWx1ZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1
cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CiAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
cHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4
OTgxMCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODYsNiArMjg2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yVHlwZT4gc3RydWN0IEhhc2hUYWJsZUFkZFJlc3VsdCB7CisgICAgICAg
IEhhc2hUYWJsZUFkZFJlc3VsdCgpIDogaXNOZXdFbnRyeShmYWxzZSkgeyB9CiAgICAgICAgIEhh
c2hUYWJsZUFkZFJlc3VsdChJdGVyYXRvclR5cGUgaXRlciwgYm9vbCBpc05ld0VudHJ5KSA6IGl0
ZXJhdG9yKGl0ZXIpLCBpc05ld0VudHJ5KGlzTmV3RW50cnkpIHsgfQogICAgICAgICBJdGVyYXRv
clR5cGUgaXRlcmF0b3I7CiAgICAgICAgIGJvb2wgaXNOZXdFbnRyeTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261295</attachid>
            <date>2015-09-15 21:25:12 -0700</date>
            <delta_ts>2015-09-16 16:04:00 -0700</delta_ts>
            <desc>even more fixing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>191127</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNB
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJB
OEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBG
RkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZF
ODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZC
MUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAw
NzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAv
KiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIg
LyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBC
QUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYw
IC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUy
MTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQv
TExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0
QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
ZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8s
CiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJ
CQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBA
IC00Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8q
IEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2
IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0
NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQx
LDYgKzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1
Mjk2LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyog
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBG
NTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRF
QzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAog
CQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8s
CiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0
NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJ
CQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4
NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZB
OTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1
NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0
OTcsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJ
CQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcx
REQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFC
ODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE4NTMsNiArMTg1MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBKdW1wKG1ha2VCcmFuY2goY29uZCkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoVGVz
dDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTY0IG1h
c2spCisgICAgeworICAgICAgICBtb3ZlKG1hc2ssIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJ
REFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwgcmVn
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1
bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIG1hc2spCiAgICAg
ewogICAgICAgICBsb2FkNjQoYWRkcmVzcywgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5k
SW52YWxpZGF0ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjA1LDYgKzYwNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKKyAgICBK
dW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRy
dXN0ZWRJbW02NCBtYXNrKQorICAgIHsKKyAgICAgICAgbW92ZShtYXNrLCBzY3JhdGNoUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIHJlZywgc2NyYXRjaFJlZ2lz
dGVyKTsKKyAgICB9CisKICAgICB2b2lkIHRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNiArNjg2LDE1IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsK
KyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5
cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIp
OworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAg
ICAgIGppdC5icmFuY2hJZk5vdFR5cGUoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywg
c2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBlcnM6OkRvTm90SGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAg
ICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcwOSw2ICs3MTgsMTUgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHJ1
Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CiAKKyAgICAgICAgaWYgKEluZmVy
cmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1w
bCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIpOworICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hJ
Zk5vdFR5cGUoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlw
ZS0+ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBlcnM6OkRvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwor
ICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBo
YXZlIHR5cGUuXG4iKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0IEBAIG5hbWVzcGFjZSBX
VEYgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0
cmluZ091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQ
dXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChjb21tYSwgIklzRGlyZWN0
Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7CiAKLSAgICBDU3RyaW5n
IHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJp
bnQoc3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6
a2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOworICAgIGlm
IChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMg
KzI2LDcwIEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5lIFB1dEJ5SWRGbGFnc19o
CiAKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGludHB0cl90IHsKICAgICBQ
dXRCeUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQorCisgICAgLy8gVGhpcyBm
bGFnIGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0LiBUaGF0IG1lYW5zIHRo
YXQgd2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBjaGVja2luZyBpZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEs
CisgICAgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCisKKyAgICAvLyBOT1RFOiBU
aGUgdmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20uCisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJy
ZWQgdHlwZSBpbnZvbHZlcyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFu
ZCB0aGVuCisgICAgLy8gdXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRo
ZSBzZWNvbmRhcnkgbWFzazoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlU
eXBlTWFzaykgeworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAg
IC8vICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAg
Ly8gICAgIC4uLgorICAgIC8vICAgICB9CisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAvLyBjYXNlIFB1dEJ5
SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIC8vICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKKyAgICAvLyAg
ICAgYnJlYWs7CisgICAgLy8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCisg
ICAgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRo
ZSBzZWNvbmRhcnkgdHlwZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0
dXJlIElELgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
ID0gMHg0LCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorCisgICAgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRv
bSA9IDB4MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCisgICAgUHV0
QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJ
bnQzMiA9IDB4MTgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAorICAg
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdCA9IDB4MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
ID0gMHgzOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKIH07CiAKK2lubGlu
ZSBQdXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJlSUQgaWQpCit7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKSA8PCAzKTsKKyNlbHNlCisgICAgUHV0QnlJZEZsYWdz
IHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKTsKKyAgICBBU1NFUlQoIShy
ZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbmRpZgorfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb2RlU3RydWN0dXJlSUQoUHV0QnlJ
ZEZsYWdzIGZsYWdzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFN0cnVjdHVyZUlEPihmbGFncyA+PiAzKTsKKyNlbHNlCisgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spOworI2Vu
ZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3Ry
dWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQp
KTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CkBAIC0xMDMsNyArMTAzLDggQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
KyAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBu
ZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCkBAIC0xNjIsNyArMTYzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3Ap
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KQEAgLTE5Myw3ICsxOTQsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yMDYsNyArMjA4LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQs
IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZl
cnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzI5LDggKzMzMiwxMCBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28s
IGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0KKyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlw
dG9yRm9yKHVpZCkpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJp
YW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0zNTYsMTMgKzM2MSwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAg
ICAKICAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3Ry
dWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJl
LCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1
bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJh
bnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICgh
ZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBtX3JlcXVpcmVkVHlwZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVs
c2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9w
ZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYg
Kzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
IHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC04NSw2ICs5MCw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdU
Rjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5m
ZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwx
MiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYg
KG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9yZXF1aXJlZFR5cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFj
ZToKKyAgICBjYXNlIFJlcGxhY2U6IHsKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsK
ICAgICAgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2Fz
ZSBSZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIs
IGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgp
LCAiPiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCks
CisgICAgICAgICAgICAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
VHJhbnNpdGlvbjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9u
OiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAg
ICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsi
LAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJl
ZFR5cGUoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1
YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1
dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1
cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlP
ZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFBy
b3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2
ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9
CiAKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHBy
aXZhdGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJQYXJz
ZXJNb2Rlcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlJlZ0V4cC5o
IgogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaCIKQEAgLTk4LDEyICs5NywxMCBAQCBzdHJ1Y3QgVW5saW5rZWRJbnN0cnVj
dGlvbiB7CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQogICAg
IFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2Rl
OyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBv
cGVyYW5kOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsg
dS5wdXRCeUlkRmxhZ3MgPSBmbGFnczsgfQogICAgIHVuaW9uIHsKICAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
OwotICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzOwogICAgIH0gdTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiwzOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICB0b3VjaChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwogICAgIH0KLSAgICAKKworICAg
IC8vIE5vdGUgdGhhdCBmb3IgYW55IHdhdGNocG9pbnQgdGhhdCBpcyB2aXNpYmxlIGZyb20gdGhl
IERGRywgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIHdyaXRlIGNvZGUgbGlrZToKKyAgICAvLwor
ICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgpCisg
ICAgLy8KKyAgICAvLyBDb25jdXJyZW50bHkgdG8gdGhpcywgdGhlIERGRyBjb3VsZCBkbzoKKyAg
ICAvLworICAgIC8vIGlmICh3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBwZXJmb3JtIG9w
dGltaXphdGlvbnM7CisgICAgLy8gaWYgKCF3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBy
ZXRyeSBjb21waWxhdGlvbjsKKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGUgREZHIGFsZ29y
aXRobSBpcyB3aWRlc3ByZWFkLCBhbmQgc291bmQsIGJlY2F1c2UgZmlyZUFsbCgpIGFuZCBpbnZh
bGlkYXRlKCkgd2lsbCBsZWF2ZQorICAgIC8vIHRoZSB3YXRjaHBvaW50IGluIGEgIWlzU3RpbGxW
YWxpZCgpIHN0YXRlLiBIZW5jZSwgaWYgZmlyZUFsbCgpIG9yIGludmFsaWRhdGUoKSBpbnRlcmxl
YXZlZCBiZXR3ZWVuCisgICAgLy8gdGhlIGZpcnN0IGlzU3RpbGxWYWxpZCgpIGNoZWNrIGFuZCB0
aGUgc2Vjb25kIG9uZSwgdGhlbiBpdCB3b3VsZCBzaW1wbHkgY2F1c2UgdGhlIERGRyB0byByZXRy
eQorICAgIC8vIGNvbXBpbGF0aW9uIGxhdGVyLgorICAgIC8vCisgICAgLy8gQnV0LCBpZiB5b3Ug
Y2hhbmdlIHNvbWUgcGllY2Ugb2Ygc3RhdGUgdGhhdCB0aGUgREZHIG1pZ2h0IG9wdGltaXplIGZv
ciwgYnV0IGludmFsaWRhdGUgdGhlCisgICAgLy8gd2F0Y2hwb2ludCBieSBkb2luZzoKKyAgICAv
LworICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgp
CisgICAgLy8KKyAgICAvLyB0aGVuIHRoZSBERkcgd291bGQgbmV2ZXIga25vdyB0aGF0IHlvdSBp
bnZhbGlkYXRlZCBzdGF0ZSBiZXR3ZWVuIHRoZSB0d28gY2hlY2tzLgorICAgIC8vCisgICAgLy8g
VGhlcmUgYXJlIHR3byB3YXlzIHRvIHdvcmsgYXJvdW5kIHRoaXM6CisgICAgLy8KKyAgICAvLyAt
IENhbGwgZmlyZUFsbCgpIHdpdGhvdXQgYSBpc0JlaW5nV2F0Y2hlZCgpIGNoZWNrLiBUaGVuLCB0
aGUgREZHIHdpbGwga25vdyB0aGF0IHRoZSB3YXRjaHBvaW50IGhhcworICAgIC8vICAgYmVlbiBp
bnZhbGlkYXRlZCB3aGVuIGl0IGRvZXMgaXRzIHNlY29uZCBjaGVjay4KKyAgICAvLworICAgIC8v
IC0gRG8gbm90IGV4cG9zZSB0aGUgd2F0Y2hwb2ludCBzZXQgdG8gdGhlIERGRyBkaXJlY3RseSwg
YW5kIGhhdmUgeW91ciBvd24gd2F5IG9mIHZhbGlkYXRpbmcgd2hldGhlcgorICAgIC8vICAgdGhl
IGFzc3VtcHRpb25zIHRoYXQgdGhlIERGRyB0aHJlYWQgdXNlZCBhcmUgc3RpbGwgdmFsaWQgd2hl
biB0aGUgREZHIGNvZGUgaXMgaW5zdGFsbGVkLgogICAgIGJvb2wgaXNCZWluZ1dhdGNoZWQoKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKGlzRmF0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTIsNyArMjExMiw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0QnkKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsg
Ly8gbmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gc3RydWN0
dXJlIGNoYWluCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFB1dEJ5SWROb25lKTsgLy8gaXMg
bm90IGRpcmVjdAorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KFB1
dEJ5SWROb25lKSk7IC8vIGlzIG5vdCBkaXJlY3QKIAogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAg
LTIxMzQsNyArMjEzNCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGly
ZWMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCgwKTsgLy8gbmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsgLy8gc3RydWN0dXJlIGNoYWluICh1bnVzZWQgaWYgZGlyZWN0KQotICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCgocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8
IHByb3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRC
eUlkSXNEaXJlY3QgOiBQdXRCeUlkTm9uZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0
YXRpY19jYXN0PGludD4oKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
ci5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwg
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBT
cGVjTm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0
KTsKKyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQsIGFkbWl0dGVkVHlw
ZXMpOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTM5LDcgKzEz
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2Rl
KSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0
cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBl
IGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJB
cnJheU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRp
b25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVj
dHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpCisgICAgICAg
IGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAgICAgICAgICAgICAmJiAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0Nl
bGwpKSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCBt
X2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CisgICAgICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCk7
CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBGaWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSAtIGlzIGl0IFRPUCwg
YSBjb25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBz
dWJ0bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBn
aXZlIHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2Un
ZAogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgogICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25k
aXRpb25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1
bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdWlkLCBzdGF0
dXNbaV0ub2Zmc2V0KCksIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09
IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5z
ZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0g
cmVzdWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTg4MCw3
ICsxODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVl
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJl
YWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0
cnVjdHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIgKzE4NzcsMjQgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyB0aGF0IGluY2x1ZGVz
IHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNvdWxkIG1ha2UgdGhlIHN0
cnVjdHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4gV2UgY3VycmVudGx5IGRv
bid0LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
c2V0KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQog
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY05v
bmU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAg
ICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjT3RoZXI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAi
QmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAg
IGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0
LCBhZG1pdHRlZFR5cGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIw
ODQsMTMgKzIwODUsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoZm9yTm9kZShub2RlLT5j
aGlsZDIoKSksIGRhdGEub2Zmc2V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICAg
ICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRl
bnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdOworCisgICAgICAgIC8vIEZJWE1FOiBU
aGUgcGFydCBvZiB0aGlzIHRoYXQgaGFuZGxlcyBpbmZlcnJlZCBwcm9wZXJ0eSB0eXBlcyByZWxp
ZXMgb24gQUkga25vd2luZyB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIHJpZ2h0IG5vdy4gVGhh
dCdzIHByb2JhYmx5IG5vdCBvcHRpbWFsLiBJbiBzb21lIGNhc2VzLCB3ZSBtYXkgcGVyZm9ybSBh
biBvcHRpbWl6YXRpb24gKHVzdWFsbHkKKyAgICAgICAgLy8gYnkgc29tZXRoaW5nIG90aGVyIHRo
YW4gQUksIG1heWJlIGJ5IENTRSBmb3IgZXhhbXBsZSkgdGhhdCBvYnNjdXJlcyBBSSdzIHZpZXcg
b2YgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyBhdCB0aGUgcG9pbnQgd2hlcmUgR2V0QnlPZmZz
ZXQgcnVucy4gQ3VycmVudGx5LCB3aGVuIHRoYXQgaGFwcGVucywgd2UnbGwgaGF2ZSB0byByZWx5
IGVudGlyZWx5CisgICAgICAgIC8vIG9uIHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIgd2Fz
IGFibGUgdG8gcHJvdmUuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX2dyYXBoLmlu
ZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsK
KworICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBh
cnNlciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGVG
cm9tUGFyc2luZzsKKyAgICAgICAgdHlwZUZyb21QYXJzaW5nLnNldChtX2dyYXBoLCBkYXRhLmlu
ZmVycmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZh
bHVlLmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOworCisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0
aGF0IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwg
dGhlbiBpdCdzIHByb2JhYmx5CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdh
cyBhbHJlYWR5IGludmFsaWRhdGVkLgorICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKworICAgICAgICBmb3JOb2RlKG5v
ZGUpID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTIxMjAsNiArMjEzNyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUg
dGltZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9ubHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
aWRlbnRpZmllck51bWJlcl07CisKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAg
ICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTIxMjksMTggKzIxNDgsMjkgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1l
cmdlKHNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgp
LmtpbmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgc3dpdGNoIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSkgeworICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0
cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICpnZXRDYXNl
Lm1ldGhvZCgpLmNvbnN0YW50KCksCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0
dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhp
c1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAq
Z2V0Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3Ry
dWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1
bHQpOworCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOiB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlu
ZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCwgdWlk
LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAg
ICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0gfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRp
Y3Rpb24pCkBAIC0yMTYzLDYgKzIxOTMsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAg
ICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0aW5nVmFsdWU7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ld
OwpAQCAtMjE3MCw2ICsyMjAyLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAg
aWYgKHRoaXNTZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisgICAgICAg
ICAgICB0aGlzVmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwor
ICAgICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXNTZXQub25seVN0cnVjdHVyZSgpICE9
IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlv
bnMuYXBwZW5kKApAQCAtMjE4NSw2ICsyMjIyLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0
LCB0cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFu
Z2VTdHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBDb250cmFkaWN0aW9uKQogICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAh
cmVzdWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2NCwxMyArMjMwNCwxMyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlk
Rmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9z
dHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgewor
ICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyks
CiAgICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAg
ICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgICAgIAor
CiAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJh
bnNpdGlvbnM7CkBAIC0yNjE1LDkgKzI2NTUsOSBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgog
RmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZmlsdGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCkKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNw
ZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0gICAgaWYgKHZhbHVlLmZpbHRlcihtX2dy
YXBoLCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgs
IHNldCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlvbk9LKQogICAgICAgICByZXR1cm4gRmls
dHJhdGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgcmV0dXJuIENv
bnRyYWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcs
NTYgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBo
LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dp
dGNoIChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206
CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090
aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAg
ICAgICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAg
c2V0KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAg
ICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAg
ICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgbWVyZ2UoU3Bl
Y090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6
CisgICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIHNldFR5cGUoZ3Jh
cGgsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3AoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
QWJzdHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0
YXRlKQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgaWYgKGNsb2JiZXJTdGF0
ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygp
OworfQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFw
aCYgZ3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBp
ZiAocmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAtMTg5LDggKzIzOSwy
MiBAQCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAgICAgcmV0dXJu
IG9sZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZp
bHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCitib29sIEFic3Ry
YWN0VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVl
OworICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVycmVkVHlwZSk7CisKKyAgICBBYnN0cmFj
dFZhbHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZh
bHVlKTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9PSB0eXBlVmFsdWU7Cit9CisKK0ZpbHRy
YXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKK3sK
KyAgICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAo
aXNDbGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcg
KzI2Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAv
LyBoYXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAg
IAotICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAg
bV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlw
ZXM7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygp
OwogICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkBAIC0zMTUsNiArMzc5LDEz
IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMKICAgICByZXR1cm4g
Q29udHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKKyAgICBmaWx0ZXJWYWx1ZS5z
ZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBmaWx0ZXIoZmlsdGVyVmFsdWUpOwor
fQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBX
ZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxl
U3RydWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiCisj
aW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAi
U3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgpAQCAtMjE0LDcgKzIx
NSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVl
KCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lk
IHNldChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgIHZvaWQg
c2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgU3RydWN0dXJlQ2xv
YmJlclN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwg
Tm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZml4
VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwogICAgIApAQCAtMjgwLDE3ICsy
ODQsMjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuICEo
bV90eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisKKyAgICBib29sIGlzVHlwZShHcmFwaCYs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgLy8gRmlsdGVy
cyB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElmIHRoZSBhZG1pdHRl
ZFR5cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAgICAvLyBpbXBsaWNpdGx5IGZp
bHRlcnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFy
ZSB1c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwuIEhlbmNlLCBhZnRlciB0aGlz
IGNhbGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24tY2VsbCBtZW1iZXJz
LiBCdXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21l
IG5vbi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0
byBvdmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVk
VHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3Jh
cGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFy
cmF5TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3Vs
YXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96
ZW5WYWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3Ry
YWN0VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBj
aGFuZ2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKICAgICBi
b29sIGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCB2YWxpZGF0
ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsOSArMjA2LDggQEAgcHJpdmF0
ZToKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFu
ZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5z
ZXJ0Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGlu
c2VydENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2Rl
KiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQp
OwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zm
c2V0KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBp
ZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiwgTm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRU
eXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNl
dCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNl
dCk7CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBi
YXNlZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJlIHNldC4gRG9lcyBub3QKICAg
ICAvLyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlvbiwgYnV0IGl0IG1heSByZXR1
cm4gYSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJhZGljdGlvbi4KQEAgLTIzMDcs
NyArMjMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9m
ZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVy
cmVkVHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAg
IGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxOCwxMyArMjMxOSwxNyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+
b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVy
TnVtYmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKKyAgICBtX2dy
YXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSk7CiAgICAgCiAgICAgTm9kZSog
Z2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIAogICAgIHJldHVybiBnZXRCeU9mZnNldDsK
IH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUp
CitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCisgICAgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwKKyAgICBOb2RlKiB2YWx1ZSkKIHsK
ICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpCkBAIC0yMzM1LDYgKzIzNDAsOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0
QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEt
PmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9
IGluZmVycmVkVHlwZTsKKyAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVk
VHlwZSk7CiAgICAgCiAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChQdXRCeU9mZnNldCwg
T3BJbmZvKGRhdGEpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsKICAgICAKQEAgLTI0
NDksNyArMjQ1Niw4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICByZXR1
cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLmNvbnN0YW50KCkpKTsKICAg
ICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAgICBO
b2RlKiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90
b3R5cGUoKSkpOwotICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwg
YmFzZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgICAg
ICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBwcmVkaWN0aW9uLCBiYXNl
Tm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBJbmZlcnJlZFR5cGU6OlRv
cCwgb3ApOwogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgogICAgICAg
ICAvLyBXaWxsIG5ldmVyIHNlZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4KQEAgLTI1NTUsMTMgKzI1
NjMsMTMgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgCiAgICAgYm9vbCBuZWVk
U3RydWN0dXJlQ2hlY2sgPSB0cnVlOwogICAgIAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CisgICAgCiAgICAgaWYg
KEpTT2JqZWN0KiBrbm93bkJhc2UgPSBiYXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0
Kj4oKSkgewogICAgICAgICAvLyBUcnkgdG8gb3B0aW1pemUgYXdheSB0aGUgc3RydWN0dXJlIGNo
ZWNrLiBOb3RlIHRoYXQgaXQncyBub3Qgd29ydGggZG9pbmcgYW55dGhpbmcgYWJvdXQgdGhpcwog
ICAgICAgICAvLyBpZiB0aGUgYmFzZSdzIHN0cnVjdHVyZSBpcyB3YXRjaGVkLgogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPmNvbnN0YW50KCktPnN0cnVjdHVyZSgpOwogICAg
ICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkgewotICAgICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVt
YmVyXTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCF2YXJpYW50LmNvbmRpdGlvblNl
dCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSdy
ZSBsb2FkaW5nIGZyb20gYSBwcm90b3R5cGUuIFdlIGV4cGVjdCB0aGUgYmFzZSBub3QgdG8gaGF2
ZSB0aGUKICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkgdXNlIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0aGUKQEAgLTI2
MjYsOSArMjYzNCwxOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAg
IGlmIChjb25zdGFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29u
c3RhbnQpOwogICAgICAgICB9CisKKyAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGlu
ZmVycmVkVHlwZTsKKyAgICAgICAgaWYgKG5lZWRTdHJ1Y3R1cmVDaGVjaykgeworICAgICAgICAg
ICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpIHsK
KyAgICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdGhpc1R5cGUgPSBtX2dy
YXBoLmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAg
ICAgICBpbmZlcnJlZFR5cGUubWVyZ2UodGhpc1R5cGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwog
ICAgICAgICAKICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAg
ICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpLCBsb2FkT3ApOworICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGluZmVycmVkVHlwZSwgbG9hZE9wKTsKICAg
ICB9CiAKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CkBAIC0yNjM5LDcgKzI2NTYsNyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgCiAgICAgUkVMRUFTRV9BU1NFUlQo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQ
cmVzZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJp
YW50Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKLSAgICByZXR1cm4gaGFuZGxlUHV0
QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOworICAg
IHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNl
dCgpLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC0yNzk4LDYgKzI4MTUsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGguY29t
cGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5s
aW5lZFB1dEJ5SWQoKTsKKworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJp
YW50IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKQorICAgICAgICAgICAgbV9ncmFwaC5yZWdp
c3RlckluZmVycmVkVHlwZSh2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgCiAgICAg
ICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZz
ZXREYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFy
aWFudHMoKTsKQEAgLTI4NTQsNiArMjg3NCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5SWQoCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5vZmZzZXQgPSB2YXJpYW50Lm9m
ZnNldCgpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJl
cjsKKyAgICAgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gdmFyaWFudC5yZXF1aXJlZFR5cGUoKTsK
KyAgICAgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShkYXRhLT5pbmZlcnJlZFR5cGUp
OwogICAgICAgICAKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgIFB1dEJ5T2Zmc2V0
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4
IEBAIGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIFBo
YW50b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0
aW9uOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIC8v
IFRoZXNlIGRvIGNsb2JiZXIgbWVtb3J5LCBidXQgbm90aGluZyB0aGF0IGlzIG9ic2VydmFibGUu
IEl0IG1heSBiZSBuaWNlIHRvIHNlcGFyYXRlIHRoZQogICAgICAgICAvLyBoZWFwcyBpbnRvIHRo
b3NlIHRoYXQgYXJlIG9ic2VydmFibGUgYW5kIHRob3NlIHRoYXQgYXJlbid0LCBidXQgd2UgZG9u
J3QgZG8gdGhhdCByaWdodCBub3cuCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24g
MTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdC
YXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luZmVycmVkVHlwZUNoZWNrLmgiCiAjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRl
ICJHZXRCeUlkU3RhdHVzLmgiCkBAIC0zNzMsNyArMzc0LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgp
ID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQu
b2Zmc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5yZXF1aXJlZFR5
cGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0OCw2ICs0NTAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxV
c2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFz
ZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlIHZhbHVlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOwogCiAg
ICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1
c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAg
ICAgICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRl
ZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgpAQCAtNDYzLDcgKzQ2
Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFz
dGF0dXMuaXNTaW1wbGUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm51bVZhcmlhbnRzKCkpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMo
KSA+IDEgJiYgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQpAQCAtNjQwLDcgKzY0Myw5IEBA
IHByaXZhdGU6CiAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNo
aWxkRWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSog
bm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCgKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBFZGdlIGNoaWxkRWRnZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wKQog
ICAgIHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAg
ICAgCkBAIC02NTYsNiArNjYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICBk
YXRhLm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRl
bnRpZmllck51bWJlcjsKKyAgICAgICAgZGF0YS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7
CiAgICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9w
ZXJ0eVN0b3JhZ2UpOwogICAgIH0KQEAgLTY2NCw4ICs2NzAsMTAgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdl
IGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwotICAgICAgICAKKwogICAgICAgICBhZGRCYXNl
Q2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJl
KCkpOworICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCB2
YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2Vs
bFVzZSk7CkBAIC03MzAsNiArNzM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEFyaXNl
cyB3aGVuIHdlIHBydW5lIE11bHRpR2V0QnlPZmZzZXQuIFdlIGNvdWxkIGhhdmUgYQogICAgICAg
ICAgICAgLy8gTXVsdGlHZXRCeU9mZnNldCB3aXRoIGEgc2luZ2xlIHZhcmlhbnQgdGhhdCBjaGVj
a3MgZm9yIHN0cnVjdHVyZSBTLAogICAgICAgICAgICAgLy8gYW5kIHRoZSBpbnB1dCBoYXMgc3Ry
dWN0dXJlcyBTIGFuZCBULCBmb3IgZXhhbXBsZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5v
cmlnaW4sCiAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNl
dCkpLCBub2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rl
c2lyZWRJbmZlcnJlZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJ
bmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3Rh
dGlvbiBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0
byBoYXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVj
dCBoYXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZElu
ZmVycmVkVHlwZSB7CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAg
IDogbV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZl
cnJlZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgZXhwZWN0ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1f
ZXhwZWN0ZWQoZXhwZWN0ZWQpCisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5
cGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51
bGxwdHIpCisgICAgICAgICwgbV9leHBlY3RlZChJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICB7Cisg
ICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
ZWN0ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxp
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhw
ZWN0ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNv
bnN0CisgICAgeworICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9v
YmplY3QKKyAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
fQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0gSW5mZXJyZWRUeXBlOjpUb3A7
CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gV1RGOjpQdHJIYXNoPEluZmVycmVkVHlwZSo+OjpoYXNoKG1fb2JqZWN0KSArIG1fZXhwZWN0
ZWQuaGFzaCgpICogNzsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQu
cHJpbnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQsIGNvbnRleHQpLCAiIGZvciAiLCBSYXdQb2ludGVy
KG1fb2JqZWN0KSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CisgICAgeworICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CisgICAgfQor
Citwcml2YXRlOgorICAgIEluZmVycmVkVHlwZSogbV9vYmplY3Q7CisgICAgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Cit9OworCitzdHJ1Y3QgRGVzaXJlZEluZmVycmVkVHlw
ZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5
cGUmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpEZXNpcmVkSW5m
ZXJyZWRUeXBlPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZUhh
c2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlw
ZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+
IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDExIEBAIHZvaWQgQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjoKICAgICB9CiB9CiAKK3ZvaWQgSW5mZXJyZWRU
eXBlQWRhcHRvcjo6YWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAgICBrZXkuYWRkKGNvbW1vbi53
YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVz
aXJlZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hw
b2ludHMoKSB7IH0KIApAQCAtOTMsNiArOTgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFkZExhemlseShjb25zdAogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShr
ZXkpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2ly
ZWRJbmZlcnJlZFR5cGUmIGtleSkKK3sKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtl
eSk7Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEw
OCw2ICsxMTgsNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAg
ICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAg
ICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1f
YWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwor
ICAgIG1faW5mZXJyZWRUeXBlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0K
IAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTE2
LDcgKzEyNyw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAg
ICAgICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVy
cmVkVmFsdWVzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0
aWxsVmFsaWQoKQotICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZh
bGlkKCk7CisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQo
KQorICAgICAgICAmJiBtX2luZmVycmVkVHlwZXMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3QKQEAgLTEyNyw2ICsxMzksNyBAQCB2b2lkIERlc2lyZWRX
YXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQCiAgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQg
dmFsdWVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOwog
ICAgIG91dC5wcmludCgiICAgIEJ1ZmZlciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmll
d3MsIGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkg
Y29uZGl0aW9uczogIiwgaW5Db250ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0
KSwgIlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4
dChtX2luZmVycmVkVHlwZXMsIGNvbnRleHQpLCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9u
RGF0YS5oIgorI2luY2x1ZGUgIkRGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJ
bmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRl
ICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgpAQCAtOTEsNiArOTIsMTggQEAgc3RydWN0IEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0bwogICAgIH0KIH07CiAKK3N0cnVjdCBJbmZl
cnJlZFR5cGVBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3Qg
RGVzaXJlZEluZmVycmVkVHlwZSYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNC
ZWVuSW52YWxpZGF0ZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICFrZXkuaXNTdGlsbFZhbGlkKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlw
ZSYga2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChp
bkNvbnRleHQoa2V5LCBjb250ZXh0KSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUg
V2F0Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxX
YXRjaHBvaW50U2V0VHlwZT4+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNTksNiArMTcyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBJ
dCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdy
YXBoOjp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdD
IG1hZ2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExh
emlseShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gSXQncyByZWNv
bW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5m
ZXJyZWRUeXBlRm9yKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMu
CisgICAgdm9pZCBhZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAog
ICAgIGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCkBAIC0xODYsNiArMjAzLDEwIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5p
c1dhdGNoZWQoa2V5KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZElu
ZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5p
c1dhdGNoZWQoa2V5KTsKKyAgICB9CiAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpAQCAtMTk2LDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRW
YWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyos
IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOworICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJyZWRU
eXBlQWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJB
cnJheVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRl
ICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgi
CkBAIC0xMDkyLDYgKzEwOTMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5j
aGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2Vs
bFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hl
Y2soCisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG1faW5kZXhJbkJsb2NrLCBub2Rl
LT5vcmlnaW4sIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5z
dG9yYWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAgICAgICAgICAgICBzcGVjdWxhdGVG
b3JCYXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg5
ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2MSwxMiArMjYxLDE2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRh
ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
aWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJz
KClbc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7CiAgICAgICAgIG91
dC5wcmludCgiLCAiLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHN0b3JhZ2VBY2Nlc3NEYXRhLm9m
ZnNldCkpOworICAgICAgICBvdXQucHJpbnQoIiwgaW5mZXJyZWRUeXBlID0gIiwgaW5Db250ZXh0
KHN0b3JhZ2VBY2Nlc3NEYXRhLmluZmVycmVkVHlwZSwgY29udGV4dCkpOwogICAgIH0KICAgICBp
ZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5
T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50
aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0KSk7CisgICAg
ICAgICAgICBpZiAoZGF0YS5jYXNlc1tpXS5tZXRob2QoKS5raW5kKCkgPT0gR2V0QnlPZmZzZXRN
ZXRob2Q6OkxvYWQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGluZmVycmVkIHZhbHVl
ID0gIiwgaW5Db250ZXh0KGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShkYXRhLmNhc2VzW2ldLnNl
dCgpLCBpZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0pLCBjb250ZXh0KSwgIiki
KTsKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERh
dGEoKSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCk7CkBAIC04ODcsNiArODkxLDM4IEBAIGJvb2wgR3JhcGg6OmlzU2Fm
ZVRvTG9hZChKU09iamVjdCogYmFzZSwKICAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5z
KHN0ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOwogfQogCitJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3IgR3JhcGg6OmluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkK
K3sKKyAgICBhc3NlcnRJc1JlZ2lzdGVyZWQoa2V5LnN0cnVjdHVyZSgpKTsKKyAgICAKKyAgICBh
dXRvIGl0ZXIgPSBtX2luZmVycmVkVHlwZXMuZmluZChrZXkpOworICAgIGlmIChpdGVyICE9IG1f
aW5mZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworCisgICAg
SW5mZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVG
b3Ioa2V5LnVpZCgpKTsKKyAgICBpZiAoIXR5cGVPYmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJl
ZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVy
cmVkVHlwZTo6VG9wOworICAgIH0KKworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBl
RGVzY3JpcHRvciA9IHR5cGVPYmplY3QtPmRlc2NyaXB0b3IoKTsKKyAgICBpZiAodHlwZURlc2Ny
aXB0b3Iua2luZCgpID09IEluZmVycmVkVHlwZTo6VG9wKSB7CisgICAgICAgIG1faW5mZXJyZWRU
eXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJl
ZFR5cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIHR5
cGVEZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodHlw
ZU9iamVjdCk7CisgICAgcmVnaXN0ZXJJbmZlcnJlZFR5cGUodHlwZURlc2NyaXB0b3IpOworCisg
ICAgLy8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJlZCBp
bmZlcnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVjdHVyZXMgbWF5CisgICAgLy8gcG9p
bnQgdG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNlLgorICAgIG1fcGxhbi53YXRjaHBv
aW50cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVzY3Jp
cHRvcikpOworCisgICAgcmV0dXJuIHR5cGVEZXNjcmlwdG9yOworfQorCiBGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNz
Pj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpA
QCAtMTA2MSw3ICsxMDk3LDcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShKUwogSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVl
IGJhc2UsIGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUu
aXNDbG9iYmVyZWQoKSkgeworICAgIGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3
ZSBjb3VsZCBkbyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0
byBjb25zdGFudC1mb2xkIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTEyLDM3IEBAIEpT
VmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShiYXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7
CiB9CiAKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgQWJzdHJhY3RWYWx1ZSByZXN1
bHQ7CisgICAgYmFzZS5mb3JFYWNoKAorICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJl
KSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICAgICAgdmFsdWUu
c2V0KCp0aGlzLCBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCkpOworICAg
ICAgICAgICAgcmVzdWx0Lm1lcmdlKHZhbHVlKTsKKyAgICAgICAgfSk7CisgICAgaWYgKGNsb2Ji
ZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICByZXN1bHQuY2xvYmJl
clN0cnVjdHVyZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBYnN0cmFjdFZhbHVlIEdy
YXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYg
YmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgaWYgKEpTVmFsdWUg
dmFsdWUgPSB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UsIG9mZnNldCkpIHsKKyAgICAgICAg
QWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5zZXQoKnRoaXMsICpmcmVlemUo
dmFsdWUpLCBjbG9iYmVyU3RhdGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIGlmIChiYXNlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCisgICAgICAgIHJldHVybiBpbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoYmFzZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkLCBjbG9iYmVy
U3RhdGUpOworCisgICAgcmV0dXJuIEFic3RyYWN0VmFsdWU6OmhlYXBUb3AoKTsKK30KKwogSlNW
YWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVP
ZmZzZXQgb2Zmc2V0KQogewogICAgIC8vIFRoaXMgaGFzIGFuIGF3ZXNvbWUgY29uY3VycmVuY3kg
c3RvcnkuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIgaW4gQnl0ZUNvZGVQYXJzZXIuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ByZVBvc3ROdW1iZXJpbmcuaCIKKyNpbmNsdWRlICJE
RkdQcm9wZXJ0eVR5cGVLZXkuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRl
ICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKQEAgLTY3NSw2
ICs2NzYsMjcgQEAgcHVibGljOgogICAgIC8vIENoZWNrcyBpZiBpdCdzIGtub3duIHRoYXQgbG9h
ZGluZyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBmaW5lLiBU
aGlzIGlzCiAgICAgLy8gY29tcHV0ZWQgYnkgdHJhY2tpbmcgd2hpY2ggY29uZGl0aW9ucyB3ZSB0
cmFjayB3aXRoIHdhdGNoQ29uZGl0aW9uKCkuCiAgICAgYm9vbCBpc1NhZmVUb0xvYWQoSlNPYmpl
Y3QqIGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKKworICAgIHZvaWQgcmVnaXN0ZXJJbmZlcnJlZFR5
cGUoY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorICAgIHsKKyAgICAgICAg
aWYgKHR5cGUuc3RydWN0dXJlKCkpCisgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBl
LnN0cnVjdHVyZSgpKTsKKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyB3aGF0IGluZmVycmVkIHR5
cGUgd2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3BlcnR5IHRvIGhhdmUgbm93IGFuZCBpbiB0
aGUgZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3Io
Y29uc3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGlu
ZmVycmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVHlwZUZvcihQcm9wZXJ0
eVR5cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICB9CisKKyAgICBBYnN0cmFjdFZhbHVlIGlu
ZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBiYXNl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSBTdHJ1Y3R1
cmVzQXJlV2F0Y2hlZCk7CisKKyAgICAvLyBUaGlzIHVzZXMgZWl0aGVyIGNvbnN0YW50IHByb3Bl
cnR5IGluZmVyZW5jZSBvciBwcm9wZXJ0eSB0eXBlIGluZmVyZW5jZSB0byBkZXJpdmUgYSBnb29k
IGFic3RyYWN0CisgICAgLy8gdmFsdWUgZm9yIHNvbWUgcHJvcGVydHkgYWNjZXNzZWQgd2l0aCB0
aGUgZ2l2ZW4gYWJzdHJhY3QgdmFsdWUgYmFzZS4KKyAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVk
VmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSk7CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9j
ayopOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJh
bWUqKTsKQEAgLTg1Niw2ICs4NzgsNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sq
LCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5l
c3M7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxs
cz4+IG1fYnl0ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFBy
b3BlcnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOworICAgIEhhc2hNYXA8UHJvcGVydHlUeXBlS2V5
LCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKICAgICBEb21pbmF0
b3JzIG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmlu
ZzsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
SW5mZXJyZWRUeXBlQ2hlY2suaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
aW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQs
IHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIGJhc2VOb2RlLAor
ICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKK3sKKyAgICBpbnNlcnRp
b25TZXQuZ3JhcGgoKS5yZWdpc3RlckluZmVycmVkVHlwZSh0eXBlKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHR5cGUua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgRm9yY2VPU1JF
eGl0LCBvcmlnaW4pOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
Qm9vbGVhbjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgQm9vbGVhblVzZSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVk
Z2UoYmFzZU5vZGUsIE90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUlu
ZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgSW50MzJVc2UpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9y
aWdpbiwgRWRnZShiYXNlTm9kZSwgTnVtYmVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIFN0
cmluZ1VzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAg
ICAgICAgICAgT3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBl
LnN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2RlLCBDZWxsVXNlKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAgICAg
ICAgT3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBlLnN0cnVj
dHVyZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2RlLCBDZWxsT3JPdGhlclVzZSkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3Jp
Z2luLCBFZGdlKGJhc2VOb2RlLCBPYmplY3RVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5v
ZGUsIE9iamVjdE9yT3RoZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlRvcDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERGR19DUkFTSChp
bnNlcnRpb25TZXQuZ3JhcGgoKSwgYmFzZU5vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBl
Q2hlY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkdJbmZlcnJl
ZFR5cGVDaGVja19oCisjZGVmaW5lIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiSW5m
ZXJyZWRUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gSW5z
ZXJ0cyBhIHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5vZGUgaGFzIHRoZSBnaXZl
biBpbmZlcnJlZCB0eXBlLgordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNl
cnRpb25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIE5vZGUqIGJhc2VOb2Rl
LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbmZl
cnJlZFR5cGVDaGVja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2s7CiBzdHJ1
Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBrbm93IHRo
ZSBpbmZlcnJlZCB0eXBlLiBGb3IgcHV0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBu
ZWVkIHRvIHJlbWVtYmVyCisgICAgLy8gd2hhdCBjaGVjayBpcyBuZWVkZWQuIEZvciBnZXRzLCB0
aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSBBSSBtaWdodCBmb3JnZXQgd2hhdCB0
eXBlIGlzCisgICAgLy8gZ3VhcmFudGVlZC4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Ig
aW5mZXJyZWRUeXBlOwogfTsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEzNSwxNCArMjEzNSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gY3VycmVudE9mZnNl
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvdXIgYW5hbHlzaXMgdHJl
YXRzIE11bHRpUHV0QnlPZmZzZXQgbGlrZSBhbiBlc2NhcGUsIHdlIG9ubHkgaGF2ZSB0bworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIHN0b3JpbmcgcmVzdWx0cyB0aGF0IHdv
dWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IHN0b3JlZCBieSBQdXRCeU9mZnNldAorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbm9kZXMuIFRob3NlIG5vZGVzIHdlcmUgZ3VhcmRlZCBieSB0aGUg
YXBwcm9wcmlhdGUgdHlwZSBjaGVja3MuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgY2FuIHNpbXBseSB0cnVzdCB0aGF0IHRoZSBp
bmNvbWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgYXJlIHVzaW5nLgogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJy
ZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudE9mZnNldCA9IG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTZXQuY2xlYXIoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgIGRhdGEt
PnZhcmlhbnRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wZXJ0eVR5cGVLZXlfaAor
I2RlZmluZSBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgb2JqZWN0IGlzIGEga2V5IGZvciBm
aW5kaW5nIGEgcHJvcGVydHkncyB0eXBlLiBJdCdzIGEgdHVwbGUgb2YgU3RydWN0dXJlKiBhbmQg
VW5pcXVlZFN0cmluZ0ltcGwqLgorCitjbGFzcyBQcm9wZXJ0eVR5cGVLZXkgeworcHVibGljOgor
ICAgIFByb3BlcnR5VHlwZUtleSgpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAg
ICAgICAgLCBtX3VpZChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVL
ZXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAg
IDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICB7Cisg
ICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1fdWlkKGRlbGV0
ZWRVSUQoKSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlICYmIG1fdWlkOyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQorICAgICAgICAgICAgJiYgbV91
aWQgPT0gb3RoZXIubV91aWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBy
b3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJl
KSArIFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlkKTsKKyAgICB9
CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhbV9zdHJ1Y3R1cmUgJiYgbV91aWQgPT0gZGVsZXRlZFVJRCgpOworICAgIH0K
KworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29u
dGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwgbV91aWQpOworICAgIH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVW5pcXVl
ZFN0cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7CisgICAg
fQorICAgIAorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIG1fdWlkOworfTsKKworc3RydWN0IFByb3BlcnR5VHlwZUtleUhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBh
LCBjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1
bHRIYXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZH
OjpQcm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6
OlByb3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb3Bl
cnR5VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBm
YWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg5ODEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlYWxOdW1iZXJV
c2U6CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAg
ICAgICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAg
ICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToKQEAgLTEy
Nyw2ICsxMjgsOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAg
ICAgaWYgKCFzYWZlVG9FeGVjdXRlRWRnZS5yZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgLy8gTk9URTogVGhpcyB0ZW5kcyB0byBsaWUgd2hlbiBpdCBjb21lcyB0byBlZmZl
Y3RmdWwgbm9kZXMsIGJlY2F1c2UgaXQga25vd3MgdGhhdCB0aGV5IGFyZW4ndCBnb2luZyB0bwor
ICAgIC8vIGdldCBob2lzdGVkIGFueXdheS4KKwogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODk4LDM2ICszODk4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VS
VChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlLmdwcigpKSwgMCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrUHRy
KAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgp
WzBdKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0
dXJlKHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHN0cnVjdHVyZS5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKLSAgICAgICAg
ICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpFcXVh
bCwgc3RydWN0dXJlLmdwcigpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZENh
Y2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwgMCwKLSAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hXZWFrUHRyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS0+c3RydWN0dXJlU2V0KCkubGFz
dCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGls
ZUNoZWNrU3RydWN0dXJlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTExLDM4ICszOTExLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VS
VChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgRXhpdEtp
bmQgZXhpdEtpbmQ7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkK
LSAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICBleGl0S2luZCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0
cnVjdHVyZSgKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1
cmVTZXQoKVswXSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKQotICAgICAgICAg
ICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoSklUQ29tcGlsZXI6
OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIGV4aXRLaW5k
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwgMCwKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAotICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVDaGVj
a1N0cnVjdHVyZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzMiw2ICs1MjMyLDgxIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSoKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVy
ZShOb2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpCit7CisgICAgQVNT
RVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CisgICAgCisgICAgaWYgKG5vZGUtPnN0
cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisg
ICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiks
IDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAg
ICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEdQUlRlbXBvcmFyeT4gc3RydWN0dXJlOworICAgICAgICBHUFJSZWcg
c3RydWN0dXJlR1BSOworICAgICAgICAKKyAgICAgICAgaWYgKHRlbXBHUFIgPT0gSW52YWxpZEdQ
UlJlZykgeworICAgICAgICAgICAgc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxHUFJUZW1w
b3Jhcnk+KHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLT5ncHIo
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSB0ZW1wR1BSOwor
ICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAg
IAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsg
KytpKSB7CisgICAgICAgICAgICBkb25lLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hXZWFrU3RydWN0dXJlKEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlR1BSLCBub2Rl
LT5zdHJ1Y3R1cmVTZXQoKVtpXSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGNlbGxHUFIpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVy
ZSgKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZUdQUiwg
bm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVj
a1N0cnVjdHVyZShOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgY2FzZSBDZWxsVXNlOgorICAgIGNhc2UgS25vd25DZWxsVXNlOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSwgY2VsbC5ncHIoKSwgSW52YWxpZEdQ
UlJlZyk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNlbGwgPSBtX2ppdC5icmFuY2hJ
ZkNlbGwodmFsdWVSZWdzKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICB2
YWx1ZVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIodmFsdWVSZWdzLCB0ZW1wR1BSKSk7CisgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGNlbGwubGlu
aygmbV9qaXQpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
ICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1
bHQ6CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5k
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogewogICAgIGlmIChub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CkBA
IC01NjM2LDYgKzU3MTEsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbChF
ZGdlIAogICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKK3sK
KyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRn
ZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvayA9IG1faml0LmJyYW5jaElmQ2VsbChvcGVyYW5kLmpzVmFsdWVSZWdzKCkpOwor
ICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBvcGVyYW5kLmpzVmFsdWVSZWdzKCksIGVkZ2Us
IFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKG9w
ZXJhbmQuanNWYWx1ZVJlZ3MoKSwgdGVtcEdQUikpOworICAgIG9rLmxpbmsoJm1faml0KTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSkKIHsKICAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QpKQpAQCAtNTkxNiw2ICs2MDA3
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2Ug
Q2VsbFVzZToKICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRn
ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBzcGVjdWxh
dGVPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjE1LDYgKzIyMTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RP
ck51bGwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzRnVuY3Rpb24oTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZVR5cGVPZihOb2RlKik7CisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
Tm9kZSosIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUik7CisgICAgdm9pZCBjb21waWxl
Q2hlY2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92ZVRydWVUbyhHUFJSZWcp
OwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKQEAgLTIzNzQsNiArMjM3Niw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSk7CiAgICAgdm9pZCBz
cGVjdWxhdGVCb29sZWFuKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChFZGdlKTsKKyAg
ICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlT2Jq
ZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRnZSk7CiAgICAgdm9pZCBz
cGVjdWxhdGVGaW5hbE9iamVjdChFZGdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDcgKzMxNCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAg
ICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAg
IC8vIFRoZXNlIGFsbG9jYXRlIGJ1dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAg
ICAgICAgICAgICBpbnNlcnRCYXJyaWVyV2l0aEludmFsaWRFeGl0KG1fbm9kZUluZGV4ICsgMSwg
RWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAg
ICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIEVkZ2UobV9ub2RlLT5jaGlsZDEo
KS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBv
Y2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBA
IC00ODEsMTEgKzQ4MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2Rl
SW5kZXgsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0QmFycmllcldpdGhJbnZhbGlk
RXhpdCh1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkKLSAgICB7Ci0gICAgICAgIGluc2Vy
dEJhcnJpZXIobm9kZUluZGV4LCBiYXNlLCBmYWxzZSk7Ci0gICAgfQotCiAgICAgdm9pZCBpbnNl
cnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlLCBib29sIGV4aXRPSyA9IHRy
dWUpCiAgICAgewogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hvdWxk
IG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTky
LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgCisKICAgICAvLyBJbiBtb3N0IGNh
c2VzLCB3aGF0IHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB2ZXJpZnkgd2hldGhlciB0aGUgc2V0
IGlzIHRvcCBvciBjbG9iYmVyZWQsIGFuZAogICAgIC8vIGlmIG5vdCwgZW51bWVyYXRlIHRoZSBz
ZXQgb2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMgb25seSBpbiBjYXNlcyB3aGVyZSB0aGUgc2luZ2xl
dG9uIGNhc2UgaXMKICAgICAvLyBtZWFuaW5nZnVsbHkgc3BlY2lhbCwgbGlrZSBmb3IgdHJhbnNp
dGlvbnMuCkBAIC0yMDIsNiArMjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gbV9zZXQub25seVN0cnVjdHVyZSgpOwogICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOwor
ICAgICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KICAgICAKICAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw5IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIEtub3duQ2Vs
bFVzZToKICAgICAgICAgb3V0LnByaW50KCJLbm93bkNlbGwiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiQ2VsbE9yT3RoZXIi
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJp
bnQoIk9iamVjdCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgZW51
bSBVc2VLaW5kIHsKICAgICBLbm93bkJvb2xlYW5Vc2UsCiAgICAgQ2VsbFVzZSwKICAgICBLbm93
bkNlbGxVc2UsCisgICAgQ2VsbE9yT3RoZXJVc2UsCiAgICAgT2JqZWN0VXNlLAogICAgIEZ1bmN0
aW9uVXNlLAogICAgIEZpbmFsT2JqZWN0VXNlLApAQCAtMTA4LDYgKzEwOSw4IEBAIGlubGluZSBT
cGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICBjYXNlIENlbGxVc2U6CiAgICAg
Y2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIENl
bGxPck90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGwgfCBTcGVjT3RoZXI7CiAgICAg
Y2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVjT2JqZWN0OwogICAgIGNhc2UgRnVu
Y3Rpb25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw2ICsyNjMsOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzLT5kZmdTaG91bGRXYXRjaCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw2ICs0MTgsNyBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAg
ICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgog
ICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAgICAgIGNhc2Ug
Q2VsbE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgICAgICAgICBjYXNlIE9iamVjdE9y
T3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjYsMjEgKzIw
MjYsNTcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgp
CiAgICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKICAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENv
bnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2Fj
aGU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKLSAgICAgICAgY2hl
Y2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwp
LCBleGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIFt0aGlzXSAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVj
dHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgY2FzZSBLbm93bkNlbGxVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hlY2tTdHJ1
Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRL
aW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1
cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY2VsbCBj
YXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIG5vdCBjZWxsIGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNvbnRpbnVhdGlvbiIpKTsK
KworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1
ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3Vy
ZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICBjaGVja1N0
cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlND
ZWxsX3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICBl
eGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0
cnVjdHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3Ry
dWN0dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwg
aXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Q2hlY2tDZWxsKCkKQEAgLTQwMjIsNiArNDA1OCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBi
bG9ja3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworCisgICAgICAgICAgICBjaGVja0lu
ZmVycmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUo
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CkBAIC01
Njc0LDYgKzU3MTIsMTM1IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMy
LCByZXN1bHRzKTsKICAgICB9CisKKyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2UgZWRn
ZSwgTFZhbHVlIHZhbHVlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisg
ICAgeworICAgICAgICAvLyBUaGlzIGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlwZUNo
ZWNrKCkgYmVjYXVzZSBpdCBpcyBjYWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlrZToK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAgICAg
ICAvLworICAgICAgICAvLyBtYXkgYmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNhc2Ug
NDI6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7Cisg
ICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAg
IC8vICAgICBjYXNlIDQzOgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4u
LiwgdHlwZTIpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJy
ZWFrOworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0eXBl
MSBhbmQgdHlwZTIgYXJlIGRpZmZlcmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVhbiB0
aGF0IHRoZSBlZGdlIHdvdWxkIGJlCisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYgdHlw
ZTIsIGluc3RlYWQgb2YgdHlwZTEgfCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
dHlwZS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUs
IGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIElu
ZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6SW50MzI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZS5ub2RlKCksIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVy
OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVk
Z2Uubm9kZSgpLCBpc05vdE51bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAg
ICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2Rl
KCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdFN0
cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBp
c05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIGlmICghYWJz
dHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBl
LnN0cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAg
ICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUg
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJy
ZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNvbnRpbnVhdGlv
biIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlw
ZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBu
b3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0
cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSkpIHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291
dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vh
a1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2Up
ICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjog
eworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2VsbCBjYXNlIikpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNo
ZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hl
Y2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUo
Y2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworCisg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RPYmplY3QodmFs
dWUsIHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxD
YXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAg
ICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAg
ICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5TcGVjQ2VsbCkp
OworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KICAgICAKICAgICBMVmFsdWUgbG9h
ZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNzUxNCw2ICs3NjgxLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAg
ICAgICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0
ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTk0LDYg
Kzc3NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAgICB9CiAgICAg
CisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxP
ck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpc05v
dENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzTm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFs
dWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2lu
dGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpAQCAtODEyNyw2ICs4MzEzLDkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmIChmYWlsQ29uZGl0
aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAg
ICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRl
LmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KApAQCAtODEzNSw5ICs4MzI0LDE0IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJP
ZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVt
YmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5h
cHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAgCisKICAgICAgICAgT1NS
RXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CiAKKyAgICAg
ICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKKyAgICAgICAgICAg
IGVtaXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKwogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3OCBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJ
Zk5vdFR5cGUoCisgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVGFnUmVnaXN0ZXJzTW9kZSBtb2Rl
KQoreworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgcmVzdWx0OworCisgICAgc3dpdGNo
IChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5v
dEJvb2xlYW4ocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE90aGVy
KHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6SW50MzI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdzLCBt
b2RlKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdzLCB0ZW1wR1BSLCBt
b2RlKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3MucGF5bG9hZEdQUigpKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1
Y3R1cmU6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUp
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgK
KyAgICAgICAgICAgICAgICBOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBBZGRyZXNzKHJlZ3Mu
cGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAgSnVt
cCBvayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAg
ICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBOb3RFcXVhbCwKKyAgICAg
ICAgICAgICAgICBBZGRyZXNzKHJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAg
ICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3RoZXIo
cmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z3MsIG1vZGUpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChyZWdz
LnBheWxvYWRHUFIoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6cHVy
aWZ5TmFOKEZQUlJlZyBmcHIpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0g
YnJhbmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcHIsIGZwcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1NSwzNyArNTU1LDQ4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEp1bXAg
YnJhbmNoSWZOb3RDZWxsKEdQUlJlZyByZWcpCisgICAgZW51bSBUYWdSZWdpc3RlcnNNb2RlIHsK
KyAgICAgICAgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzLAorICAgICAgICBIYXZlVGFnUmVnaXN0ZXJz
CisgICAgfTsKKworICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEdQUlJlZyByZWcsIFRhZ1JlZ2lz
dGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2
ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZywgVHJ1c3RlZEltbTY0KFRhZ01hc2spKTsKICNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgcmVnLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogI2Vu
ZGlmCiAgICAgfQotICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzIHJlZ3MpCisg
ICAgSnVtcCBicmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJzTW9k
ZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChyZWdzLmdwcigpKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaElmTm90Q2VsbChyZWdzLmdwcigpLCBtb2RlKTsKICNlbHNlCi0gICAgICAgIHJldHVy
biBicmFuY2hJZk5vdENlbGwocmVncy50YWdHUFIoKSk7CisgICAgICAgIHJldHVybiBicmFuY2hJ
Zk5vdENlbGwocmVncy50YWdHUFIoKSwgbW9kZSk7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
SnVtcCBicmFuY2hJZkNlbGwoR1BSUmVnIHJlZykKKyAgICBKdW1wIGJyYW5jaElmQ2VsbChHUFJS
ZWcgcmVnLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIGlm
IChtb2RlID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KFplcm8sIHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIFRydXN0ZWRJbW02NChUYWdNYXNrKSk7CiAjZWxzZQor
ICAgICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHJlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
ICNlbmRpZgogICAgIH0KLSAgICBKdW1wIGJyYW5jaElmQ2VsbChKU1ZhbHVlUmVncyByZWdzKQor
ICAgIEp1bXAgYnJhbmNoSWZDZWxsKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVyc01vZGUg
bW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHJldHVybiBicmFuY2hJZkNlbGwocmVncy5ncHIoKSk7CisgICAgICAgIHJldHVybiBicmFu
Y2hJZkNlbGwocmVncy5ncHIoKSwgbW9kZSk7CiAjZWxzZQotICAgICAgICByZXR1cm4gYnJhbmNo
SWZDZWxsKHJlZ3MudGFnR1BSKCkpOworICAgICAgICByZXR1cm4gYnJhbmNoSWZDZWxsKHJlZ3Mu
dGFnR1BSKCksIG1vZGUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtNjEzLDQzICs2MjQsNTUg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIEp1bXAgYnJhbmNoSWZJbnQzMihK
U1ZhbHVlUmVncyByZWdzKQorICAgIEp1bXAgYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyByZWdz
LCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdz
LmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBpZiAobW9k
ZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEFib3Zl
T3JFcXVhbCwgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVncy5ncHIoKSwgVHJ1c3RlZElt
bTY0KFRhZ1R5cGVOdW1iZXIpKTsKICNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShtb2RlKTsK
ICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBKdW1wIGJy
YW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICBKdW1wIGJyYW5jaElmTm90SW50
MzIoSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lz
dGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaDY0
KEJlbG93LCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAg
ICAgICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaDY0KEJlbG93LCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3csIHJlZ3MuZ3ByKCksIFRydXN0ZWRJbW02
NChUYWdUeXBlTnVtYmVyKSk7CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAg
ICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAjZW5kaWYKICAgICB9CiAKICAgICAvLyBOb3RlIHRo
YXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4gNjQtYml0IG1vZGUuCi0gICAgSnVtcCBicmFu
Y2hJZk51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICBKdW1wIGJy
YW5jaElmTnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBUYWdSZWdpc3Rl
cnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICBVTlVTRURfUEFSQU0odGVtcEdQUik7Ci0gICAgICAgIHJldHVybiBicmFuY2hU
ZXN0NjQoTm9uWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdz
LmdwcigpLCBUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKG1vZGUpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3MudGFn
R1BSKCksIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoQmVsb3csIHRlbXBHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7CiAjZW5kaWYKICAgICB9CiAg
ICAgCiAgICAgLy8gTm90ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDY0LWJpdCBt
b2RlLgotICAgIEp1bXAgYnJhbmNoSWZOb3ROdW1iZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVn
IHRlbXBHUFIpCisgICAgSnVtcCBicmFuY2hJZk5vdE51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBH
UFJSZWcgdGVtcEdQUiwgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykK
ICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgVU5VU0VEX1BBUkFNKHRlbXBHUFIp
OwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdSZWdp
c3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3ByKCks
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hU
ZXN0NjQoWmVybywgcmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpKTsKICNl
bHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdzLnRhZ0dQUigpLCB0ZW1wR1BSKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyAr
IDEpKTsKICNlbmRpZgpAQCAtNzE5LDYgKzc0Miw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0K
IAorICAgIEp1bXBMaXN0IGJyYW5jaElmTm90VHlwZSgKKyAgICAgICAgSlNWYWx1ZVJlZ3MsIEdQ
UlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBUYWdSZWdpc3Rl
cnNNb2RlKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hTdHJ1
Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICszNzcsOCBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc1B0
ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UpCi0gICAgICAgICAg
ICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Cisg
ICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50
LmltcGwoKSkpIHsKIAogICAgICAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygKICAg
ICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzMsNiArNjMz
LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICBw
Y1s1XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBvZmZzZXQKICAgICAgICAgcGNbNl0udS5wb2lu
dGVyID0gbnVsbHB0cjsgLy8gbmV3IHN0cnVjdHVyZQogICAgICAgICBwY1s3XS51LnBvaW50ZXIg
PSBudWxscHRyOyAvLyBzdHJ1Y3R1cmUgY2hhaW4KKyAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxh
Z3MgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihwY1s4XS51LnB1dEJ5
SWRGbGFncyAmIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrKTsKICAgICAgICAgCiAgICAgICAg
IEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtNjYwLDEyICs2NjIsMTgg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBjWzddLnUuc3RydWN0dXJlQ2hhaW4uc2V0KAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2hh
aW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
cGNbOF0udS5wdXRCeUlkRmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoaWRl
bnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgp
OwogICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
CisgICAgICAgICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KAorICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyB8Cisg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcihp
ZGVudC5pbXBsKCkpLnB1dEJ5SWRGbGFncygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTI2NSwxNCArMTI2NSw4OCBAQCBfbGxpbnRfb3BfcHV0X2J5X2lkOgogICAgIHdyaXRlQmFy
cmllck9uT3BlcmFuZHMoMSwgMykKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDMpCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwodDMsIHQwLCAub3BQdXRCeUlkU2xvdykKLSAg
ICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MgotICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbig0LCB0MSkKLSAgICBiaW5lcSB0MiwgdDEsIC5vcFB1dEJ5SWRTbG93CisgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDQsIHQyKQorICAgIGJpbmVxIHQyLCBKU0NlbGw6Om1fc3RydWN0
dXJlSURbdDBdLCAub3BQdXRCeUlkU2xvdwogCiAgICAgIyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZl
OgotICAgICMgdDEsIHQyIC0+IGN1cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0MiAtPiBjdXJy
ZW50IHN0cnVjdHVyZSBJRAogICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKIAorICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigzLCB0MSkKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MykK
KworICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDgsIHQxKQorCisgICAgIyBBdCB0aGlzIHBvaW50
LCB3ZSBoYXZlOgorICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKKyAgICAjIHQxIC0+IHB1dCBieSBp
ZCBmbGFncworICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKKyAgICAjIHQzIC0+IHZh
bHVlIHRvIHB1dAorCisgICAgYnRwbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ssIC5vcFB1
dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcgorCisgICAgIyBXZSBoYXZl
IG9uZSBvZiB0aGUgbm9uLXN0cnVjdHVyZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hpY2ggb25l
LgorICAgIGFuZHAgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrLCB0MQorICAgIGJwbHQgdDEsIFB1
dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJp
bmcKKworICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIE9iamVjdCwg
T2JqZWN0T3JPdGhlciwgVG9wCisgICAgYnBsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmpl
Y3RPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyCisKKyAg
ICAjIFdlIGFyZSBlaXRoZXIgT2JqZWN0T3JPdGhlciBvciBUb3AuCisgICAgYnBlcSB0MSwgUHV0
QnlJZFNlY29uZGFyeVR5cGVUb3AsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworCisgICAg
IyBDaGVjayBpZiB3ZSBhcmUgT2JqZWN0T3JPdGhlci4KKyAgICBidHF6IHQzLCB0YWdNYXNrLCAu
b3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Cisub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6CisgICAg
YW5kcSB+VGFnQml0VW5kZWZpbmVkLCB0MworICAgIGJxZXEgdDMsIFZhbHVlTnVsbCwgLm9wUHV0
QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5
SWRUeXBlQ2hlY2tMZXNzVGhhbk9iamVjdE9yT3RoZXI6CisgICAgIyBXZSBhcmUgZWl0aGVyIFN0
cmluZyBvciBPYmplY3QuCisgICAgYnRxbnogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRTbG93Cisg
ICAgYnBlcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcsIC5vcFB1dEJ5SWRUeXBlQ2hl
Y2tPYmplY3QKKyAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3RyaW5nVHlwZSwgLm9wUHV0
QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93Cisub3BQdXRCeUlk
VHlwZUNoZWNrT2JqZWN0OgorICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlw
ZSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisK
Ky5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZzoKKyAgICAjIFdlIGFyZSBvbmUgb2Yg
dGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJlcgorICAg
IGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tM
ZXNzVGhhbkludDMyCisKKyAgICAjIFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgorICAg
IGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNoZWNr
TnVtYmVyCisKKyAgICBicWFlcSB0MywgdGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVj
a2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tO
dW1iZXI6CisgICAgYnRxbnogdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVz
c1RoYW5JbnQzMjoKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBC
b29sZWFuLCBPdGhlci4KKyAgICBicG5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFu
LCAub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgorICAgIHhvcnEgVmFsdWVGYWxzZSwg
dDMKKyAgICBidHF6IHQzLCB+MSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1w
IC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90aGVyOgorICAg
IGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tP
dGhlcgorICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5
cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmUKKyAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlU
eXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcgor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0
cnVjdHVyZToKKyAgICB1cnNoaWZ0cCAzLCB0MQorICAgIGJpbmVxIHQxLCBKU0NlbGw6Om1fc3Ry
dWN0dXJlSURbdDNdLCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXM6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIAogICAgIGJ0aXogdDEs
IC5vcFB1dEJ5SWROb3RUcmFuc2l0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsMjIgQEAgZWxzZQogICAgIGNvbnN0IExvd2VzdFRh
ZyA9IERlbGV0ZWRWYWx1ZVRhZwogZW5kCiAKKyMgTk9URTogVGhlIHZhbHVlcyBiZWxvdyBtdXN0
IGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGluIFB1dEJ5SWRGbGFncy5oLgorY29uc3QgUHV0QnlJ
ZFByaW1hcnlUeXBlTWFzayA9IDB4NgorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5
ID0gMHgwCitjb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgy
Citjb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9IDB4
NAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OAorY29uc3QgUHV0QnlJZFNl
Y29uZGFyeVR5cGVCb3R0b20gPSAweDAKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVh
biA9IDB4OAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAKK2NvbnN0IFB1
dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIgPSAweDE4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU51bWJlciA9IDB4MjAKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOAor
Y29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QgPSAweDMwCitjb25zdCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZU9iamVjdE9yT3RoZXIgPSAweDM4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZVRvcCA9IDB4NDAKKwogY29uc3QgQ2FsbE9wQ29kZVNpemUgPSA5CiAKIGlmIFg4Nl82NCBvciBB
Uk02NCBvciBDX0xPT1AKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5mZXJyZWRUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlw
ZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJ
bmZlcnJlZFR5cGUpIH07CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0m
IHZtKQoreworICAgIEluZmVycmVkVHlwZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SW5mZXJyZWRUeXBlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBlKiBp
bmZlcnJlZFR5cGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKyAgICBpbmZl
cnJlZFR5cGUtPkluZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSgpOworfQorCitTdHJ1Y3R1cmUq
IEluZmVycmVkVHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJl
ZFR5cGUqIGluZmVycmVkVHlwZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKworICAg
IGlmIChpbmZlcnJlZFR5cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLmFkZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIoJmluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUtPm1fZmluYWxpemVy
KTsKK30KKworSW5mZXJyZWRUeXBlOjpLaW5kIEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKFB1
dEJ5SWRGbGFncyBmbGFncykKK3sKKyAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlU
eXBlTWFzaykgeworICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAgICAg
ICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAgICAgIGNh
c2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b206CisgICAgICAgICAgICByZXR1cm4gQm90dG9t
OworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbjoKKyAgICAgICAgICAg
IHJldHVybiBCb29sZWFuOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXI6
CisgICAgICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFy
eVR5cGVJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBQdXRC
eUlkU2Vjb25kYXJ5VHlwZU51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiBOdW1iZXI7CisgICAg
ICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0OgorICAgICAg
ICAgICAgcmV0dXJuIE9iamVjdDsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9i
amVjdE9yT3RoZXI6CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAg
Y2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcDoKKyAgICAgICAgICAgIHJldHVybiBUb3A7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICAgICAgfQorICAgIGNhc2UgUHV0QnlJ
ZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmV0dXJuIE9iamVjdFdp
dGhTdHJ1Y3R1cmU7CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICAgICAgcmV0dXJuIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBCb3R0b207CisgICAgfQorfQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3Ig
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZShKU1ZhbHVlIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBOdW1iZXI7CisgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKSB7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBp
ZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAg
IGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJl
KCkpOworICAgICAgICAgICAgcmV0dXJuIE9iamVjdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gVG9wOworfQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yOjpmb3JGbGFncyhWTSYgdm0sIFB1dEJ5SWRGbGFncyBmbGFncykKK3sKKyAgICBL
aW5kIGtpbmQgPSBraW5kRm9yRmxhZ3MoZmxhZ3MpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
OworICAgIGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgIHN0cnVjdHVyZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpOworICAg
IGVsc2UKKyAgICAgICAgc3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICByZXR1cm4gRGVzY3JpcHRv
cihraW5kLCBzdHJ1Y3R1cmUpOworfQorCitQdXRCeUlkRmxhZ3MgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yOjpwdXRCeUlkRmxhZ3MoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7Cisg
ICAgY2FzZSBCb3R0b206CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+
KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9t
KTsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlk
RmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBl
Qm9vbGVhbik7CisgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1
dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFy
eVR5cGVPdGhlcik7CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29u
ZGFyeVR5cGVJbnQzMik7CisgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlTnVtYmVyKTsKKyAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0
QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcpOworICAgIGNhc2UgT2JqZWN0OgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkg
fCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCk7CisgICAgY2FzZSBPYmplY3RPck90aGVyOgor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIpOworICAgIGNh
c2UgVG9wOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlk
UHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCk7CisgICAgY2Fz
ZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJ
ZEZsYWdzPigKKyAgICAgICAgICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1
cmUgfCBlbmNvZGVTdHJ1Y3R1cmVJRChtX3N0cnVjdHVyZS0+aWQoKSkpOworICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KAorICAgICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIgfCBlbmNvZGVTdHJ1Y3R1cmVJRChtX3N0cnVjdHVyZS0+aWQoKSkpOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQdXRCeUlk
Tm9uZTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6Om1lcmdlKGNvbnN0IERl
c2NyaXB0b3ImIG90aGVyKQoreworICAgIC8vIEZpbHRlciBvdXQgY29tbW9uIHRoaW5ncyB0byBz
aW1wbGlmeSB0aGUgc3dpdGNoIHN0YXRlbWVudCBiZWxvdy4KKyAgICBpZiAoKnRoaXMgPT0gb3Ro
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob3RoZXIubV9raW5kID09IEJvdHRvbSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToK
KyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVh
bjoKKyAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IERlc2NyaXB0b3IoT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXIsIG90aGVyLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAg
ICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICAqdGhpcyA9IE51bWJl
cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0
aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBOdW1i
ZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhp
cyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOiAvLyBJZiB3ZSBzZWUgdGhpcyBoZXJlLCB0aGVuIHdl
IGtub3cgdGhhdCB0aGUgc3RydWN0dXJlcyBkaWRuJ3QgbWF0Y2guCisgICAgICAgIGNhc2UgT2Jq
ZWN0OgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAqdGhp
cyA9IG90aGVyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAg
bV9raW5kID0gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAqdGhpcyA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiAvLyBJZiB3ZSBzZWUgdGhpcyBo
ZXJlLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgc3RydWN0dXJlcyBkaWRuJ3QgbWF0Y2guCisgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhl
cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICBjYXNlIE90aGVyOgor
ICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHN3aXRj
aCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmpl
Y3Q6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIGNhc2UgVG9wOgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
KnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OnN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAoreworICAgIERlc2NyaXB0
b3IgbWVyZ2VkID0gKnRoaXM7CisgICAgbWVyZ2VkLm1lcmdlKG90aGVyKTsKKyAgICByZXR1cm4g
KnRoaXMgPT0gbWVyZ2VkOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAg
IG91dC5wcmludCgiOiIsIGluQ29udGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK0luZmVycmVkVHlw
ZTo6SW5mZXJyZWRUeXBlKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVN0
cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fd2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCit7
Cit9CisKK0luZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSgpCit7Cit9CisKK2Jvb2wgSW5mZXJy
ZWRUeXBlOjpjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0
IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9w
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9j
a2VyKSA9PSBleHBlY3RlZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0
IERlc2NyaXB0b3ImIGV4cGVjdGVkKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgcmV0dXJuIGNhbldhdGNoKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
ZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0
LmFkZCh3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQo
V2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBkZXNjcmlwdG9yKCkpOworfQorCitib29s
IEluZmVycmVkVHlwZTo6d2lsbFN0b3JlVmFsdWVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIERlc2NyaXB0
b3IgbXlUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIERlc2NyaXB0b3Igb3RoZXJUeXBl
ID0gRGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFsdWUpOworCisgICAgbXlUeXBlLm1lcmdlKG90aGVy
VHlwZSk7CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpICE9IG15VHlwZSk7IC8vIFRo
ZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIG9uIHRoZSBzbG93IHBhdGguCisKKyAg
ICBzZXQobG9ja2VyLCB2bSwgbXlUeXBlKTsKKworICAgIHJldHVybiBraW5kKGxvY2tlcikgIT0g
VG9wOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtKQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgc2V0KGxvY2tlciwgdm0s
IFRvcCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBWTSYgdm0sIERlc2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sKKyAgICAv
LyBXZSB3aWxsIHRyaWdnZXIgd3JpdGUgYmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4g
Q3VycmVudGx5LCB3cml0ZSBiYXJyaWVycyBkb24ndCBHQywgYnV0IHRoYXQKKyAgICAvLyBjb3Vs
ZCBjaGFuZ2UuIElmIGl0IGRvZXMsIHdlIGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhh
dCB3ZSBjb3VsZCBoYXZlIHVzZWQKKyAgICAvLyBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGlu
IHRoZSBjYWxsZXIsIGJ1dCB0aGUgY2FsbGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1heWJlIHRo
YXQgd291bGRuJ3QgYmUKKyAgICAvLyBhIGdvb2QgaWRlYS4KKyAgICBEZWZlckdDRm9yQVdoaWxl
IGRlZmVyR0Modm0uaGVhcCk7CisgICAgCisgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBu
b3QgcmVhbGx5IGNoYW5naW5nIHRoZSB0eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55
dGhpbmcuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgbmV3IGRlc2NyaXB0b3IgbXVzdCBiZSBtb3JlIGdl
bmVyYWwgdGhhbiB0aGUgcHJldmlvdXMgb25lLgorICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN1
YnN1bWVzKGRlc2NyaXB0b3IobG9ja2VyKSkpOworCisgICAgLy8gSWYgdGhlIG5ldyBkZXNjcmlw
dG9ycyBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLCB0aGVuIGl0IGNhbiBvbmx5IGJlIGJlY2F1
c2Ugb25lIGlzIG51bGwuCisgICAgaWYgKGRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSAh
PSBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3Io
bG9ja2VyKS5zdHJ1Y3R1cmUoKSB8fCAhbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisKKyAg
ICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHR5cGUsIHNvIG1ha2Ugc3VyZSB0aGF0IGlmIGFueW9u
ZSB3YXMgd2F0Y2hpbmcsIHRoZXkgZmluZCBvdXQgYWJvdXQgaXQgbm93LiBJZgorICAgIC8vIGFu
eW9uZSBpcyB3YXRjaGluZywgd2UgbWFrZSBzdXJlIHRvIGdvIHRvIFRvcCBzbyB0aGF0IHdlIGRv
bid0IGRvIHRoaXMgc29ydCBvZiB0aGluZyBhZ2Fpbi4KKyAgICBpZiAobV93YXRjaHBvaW50U2V0
LnN0YXRlKCkgIT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgIC8vIFdlIGNhbm5vdCBoYXZl
IGJlZW4gaW52YWxpZGF0ZWQsIHNpbmNlIGlmIHdlIHdlcmUsIHRoZW4gd2UnZCBhbHJlYWR5IGJl
IGF0IFRvcC4KKyAgICAgICAgQVNTRVJUKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IElzSW52
YWxpZGF0ZWQpOworCisgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGRvIGV4cGVuc2l2ZSB0aGlu
Z3MgYmVjYXVzZSBzb21lIGNvbXBpbGVyIHRocmVhZCBkZWNpZGVkIHRvIHdhdGNoIHRoaXMgdHlw
ZSBhbmQKKyAgICAgICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFuZ2VkLiBBc3N1bWUgdGhhdCB0aGlz
IHByb3BlcnR5IGlzIGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBkbyBhbnkgbW9yZSB0aGluZ3MgZm9y
CisgICAgICAgIC8vIGl0LgorICAgICAgICBuZXdEZXNjcmlwdG9yID0gVG9wOworCisgICAgICAg
IG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKCJJbmZlcnJlZCB0eXBlIGNoYW5nZWQiKTsKKyAgICB9
CisKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ug
bm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQor
ICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJy
ZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3Jp
cHRvci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4K
KyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0
dXJlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdE
ZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0
dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZS0+bV93YXRjaHBvaW50
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRv
ciBraW5kLgorICAgIG1fa2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAgLy8gQXNz
ZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09
IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJl
KCkKK3sKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKKworICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgRGVzY3JpcHRvciBuZXdE
ZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIG5ld0Rlc2NyaXB0b3IucmVtb3Zl
U3RydWN0dXJlKCk7CisgICAgCisgICAgc2V0KGxvY2tlciwgdm0sIG5ld0Rlc2NyaXB0b3IpOwor
fQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJl
SW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGlu
ZmVycmVkU3RydWN0dXJlID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJl
Kj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNF
VE9GKEluZmVycmVkU3RydWN0dXJlLCBtX3dhdGNocG9pbnQpKTsKKworICAgIGluZmVycmVkU3Ry
dWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
KQoreworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CisgICAgICAg
IGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAorICAgICAgICAgICAgYml0d2lzZV9j
YXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgbV9m
aW5hbGl6ZXIpKTsKKworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVy
ZS0+bV9wYXJlbnQpKTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGluZmVycmVkU3Ry
dWN0dXJlLT5tX3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIGluZmVycmVkU3RydWN0dXJlLT5t
X3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRT
dHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9z
dHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFR5cGU6OktpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAg
ICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBvdXQucHJp
bnQoIk90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50
MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBv
dXQucHJpbnQoIlN0cmluZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0
cnVjdHVyZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgi
T2JqZWN0T3JPdGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OlRvcDoKKyAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5
cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlX2gK
KyNkZWZpbmUgSW5mZXJyZWRUeXBlX2gKKworI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgi
CisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCisjaW5jbHVk
ZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmpl
Y3QgdXNlZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRp
ZXMuCisKK2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBj
cmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNM
QVJFX0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAor
ICAgICAgICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAg
IE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAor
ICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAg
ICAgICBPYmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisgICAgc3RhdGljIEtp
bmQga2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyk7CisgICAgCisgICAgc3RhdGljIGJvb2wgaGFz
U3RydWN0dXJlKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNs
YXNzIERlc2NyaXB0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVzY3JpcHRvcigpCisgICAg
ICAgICAgICA6IG1fa2luZChCb3R0b20pCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxw
dHIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlc2NyaXB0b3IoS2luZCBraW5k
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIpCisgICAgICAgICAgICA6IG1fa2luZChr
aW5kKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgICAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JW
YWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JGbGFncyhWTSYs
IFB1dEJ5SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgIT0gQm90dG9tIHx8IG1fc3Ry
dWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJ1Y3R1cmU7IH0KKworICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzKCkgY29u
c3Q7CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFsdWUoSlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAg
ICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFu
KCk7CisgICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAgY2FzZSBOdW1iZXI6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7CisgICAgICAgICAgICBj
YXNlIFN0cmluZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3Ry
dWN0dXJlOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQorICAgICAgICAg
ICAgICAgICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpID09IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBPYmplY3RP
ck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
IHx8IHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIFRvcDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICAgICAmJiBtX3N0cnVj
dHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlB0
ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fa2luZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBtZXJnZShjb25zdCBE
ZXNjcmlwdG9yJik7CisgICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0
aGUgb3RoZXIgb25lLgorICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBj
b25zdDsKKworICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5kOworICAgICAgICBTdHJ1Y3R1cmUqIG1f
c3RydWN0dXJlOworICAgIH07CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVh
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3Ry
dWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAg
IAorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAg
IH0KKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0
b3IobG9ja2VyKTsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQo
KTsgfQorCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBUb3A7IH0K
KyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gVG9wOyB9CisK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBpcyBzdGlsbCByZWxldmFu
dCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0J3MgVG9wLgorICAgIEFM
V0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNjcmlwdG9yID0gZGVzY3JpcHRvck1h
aW5UaHJlYWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNjcmlwdG9yLmluY2x1ZGVzVmFsdWUo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREZXNjcmlwdG9yLmtpbmQoKSAhPSBU
b3A7CisgICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHZhbHVlKTsKKyAgICB9
CisKKyAgICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5cGUgaXJyZWxldmFudC4KKyAgICB2
b2lkIG1ha2VUb3AoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1ha2VUb3BTbG93KHZtKTsKKyAgICB9CisKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1ha2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5m
ZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3IuIE5vdGUgdGhhdAorICAgIC8vIHRoaXMgd2ls
bCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3AuCisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICBib29s
IGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImKTsKKyAgICAKKyAgICB2b2lkIGFkZFdhdGNocG9p
bnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50Kik7CisgICAg
dm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZShWTSYpOworICAgIH5J
bmZlcnJlZFR5cGUoKTsKKworICAgIGJvb2wgd2lsbFN0b3JlVmFsdWVTbG93KFZNJiwgSlNWYWx1
ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYpOworICAgIHZvaWQgc2V0KGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBWTSYsIERlc2NyaXB0b3IpOworICAgIHZvaWQgcmVtb3ZlU3RydWN0
dXJlKCk7CisKKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKKyAgICAKKyAg
ICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVX
YXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5m
ZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2
b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisgICAgfTsKKwor
ICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyIDogcHVibGljIFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5h
bGl6ZXIoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1
cmUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAg
ICAgIEluZmVycmVkU3RydWN0dXJlKFZNJiwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVy
ZSopOworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJ1Y3R1cmUuZ2V0KCk7IH07CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3Mg
SW5mZXJyZWRUeXBlOworICAgICAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRj
aHBvaW50OworICAgICAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXI7
CisgICAgICAgIAorICAgICAgICBJbmZlcnJlZFR5cGUqIG1fcGFyZW50OworICAgICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKworICAgICAgICBJbmZlcnJlZFN0cnVj
dHVyZVdhdGNocG9pbnQgbV93YXRjaHBvaW50OworICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZUZp
bmFsaXplciBtX2ZpbmFsaXplcjsKKyAgICB9OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEluZmVy
cmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKworICAgIC8vIE5PVEU6IElmIHRoaXMgaXMgYmVp
bmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNhdXNlIHRoYXQgaW1wbGllcyB0aGF0
IGl0IHdvdWxkbid0IGJlCisgICAgLy8gcHJvZml0YWJsZSB0byB3YXRjaCBpdCBhZ2Fpbi4gQWxz
bywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBpcyBuZXZlciBleHBvc2VkIHRv
IHRoZSBERkcKKyAgICAvLyB0aHJlYWQuIFRoZSBERkcgd2lsbCB1c2UgdGhlIEluZmVycmVkVHlw
ZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVzLgorICAgIElubGluZVdhdGNocG9pbnRTZXQg
bV93YXRjaHBvaW50U2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBX
VEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkluZmVycmVkVHlw
ZTo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZVRhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJ
bmZlcnJlZFR5cGVUYWJsZTo6c19pbmZvID0geyAiSW5mZXJyZWRUeXBlVGFibGUiLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZVRhYmxlKSB9OworCitJbmZlcnJlZFR5cGVU
YWJsZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRU
eXBlVGFibGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlw
ZVRhYmxlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlVGFibGUodm0pOworICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlVGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZVRhYmxl
KiBpbmZlcnJlZFR5cGVUYWJsZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZVRhYmxlKj4oY2Vs
bCk7CisgICAgaW5mZXJyZWRUeXBlVGFibGUtPkluZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRU
eXBlVGFibGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
K30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJl
ZFR5cGVUYWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworCisgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIoaW5mZXJyZWRUeXBlVGFibGUtPm1fbG9jayk7CisgICAg
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGluZmVycmVkVHlwZVRhYmxlLT5tX3RhYmxlKSB7Cisg
ICAgICAgIGlmICghZW50cnkudmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS52YWx1ZS5j
bGVhcigpOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorewor
ICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOworICAgIGlmIChpdGVyID09IG1fdGFi
bGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIFRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBpbnZhbGlkYXRlZCB0eXBlcy4KKyAg
ICBpZiAoIWl0ZXItPnZhbHVlLT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAgaXRlci0+dmFsdWUu
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGl0
ZXItPnZhbHVlLmdldCgpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpn
ZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2VyLCB1aWQpOworfQorCitJbmZlcnJl
ZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
K3sKKyAgICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Cit9CisKK2Jvb2wgSW5mZXJy
ZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKAorICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAg
IC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5IG9uZSB0
aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIAorICAgIGlmIChhZ2UgPT0gT2xkUHJv
cGVydHkpIHsKKyAgICAgICAgVGFibGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5k
KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkg
fHwgIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYnNlbmNlIG9u
IHJlcGxhY2UgPT4gdG9wLgorICAgICAgICAKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT53aWxs
U3RvcmVWYWx1ZSh2bSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IAorICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90
YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigp
KTsKKyAgICB9CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEluZmVycmVk
VHlwZSogaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNl
dCh2bSwgdGhpcywgaW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3AoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7Cisg
ICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25l
IHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0
eSkgeworICAgICAgICBUYWJsZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJv
cGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAh
aXRlci0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9
PiB0b3AuCisKKyAgICAgICAgaXRlci0+dmFsdWUtPm1ha2VUb3Aodm0pOworICAgICAgICBpdGVy
LT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVGFibGVUeXBl
OjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1l
LnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAgaWYgKCFy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRvcCh2bSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5jbGVhcigpOworfQorCitJbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFibGUoVk0m
IHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuZ2V0KCkp
Cit7Cit9CisKK0luZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBl
VGFibGVfaAorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlw
ZS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0YWJs
ZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBKU0NlbGwg
YmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVzdHJ1Y3RvciBhbmQg
bWFrZXMgbGlmZXR5cGUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNlIGl0J3Mg
YSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJlIGRlbGV0ZWQgd2hp
bGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVydHlUYWJs
ZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZlcnJlZFR5
cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5b3UgdGhp
bmsgb2YgImEgcHJvcGVydHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21lIFN0cnVj
dHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlwZXMgb2YgcHJv
cGVydGllcyBmcm9tCisvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRoZSBzdHJ1Y3R1
cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2NsYXNzIEluZmVycmVk
VHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7
CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOwor
CisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBi
b3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKKyAgICAvLyBvd25p
bmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHkuCisgICAgSW5mZXJy
ZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBs
Kik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZl
cnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUpOworCisgICAgZW51bSBTdG9yZWRQcm9wZXJ0eUFn
ZSB7CisgICAgICAgIE5ld1Byb3BlcnR5LAorICAgICAgICBPbGRQcm9wZXJ0eQorICAgIH07Cisg
ICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJv
cGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8v
IHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFs
bHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCisgICAgLy8gSW52YWxpZGF0
ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3Jl
IGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5
TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZVRh
YmxlKFZNJik7CisgICAgfkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICAvLyBCb3R0b206IGFi
c2VuY2UgZnJvbSB0YWJsZS4KKyAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1
ZS0+aXNSZWxldmFudCgpLCBvciBhYnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8KKyAgICAvLyBX
ZSBrbm93IGhvdyB0byBkZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0
b20gb3IgdG9wIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIC8vIHByb3BlcnR5IGlzIHBy
ZXNlbnQgaW4gdGhlIG93bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0
cnVjdHVyZSwgYWJzZW5jZSBtYXkgaGF2ZQorICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhl
IHdheSB0aGF0IHRoaXMgY2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBr
bm93cyBvZiB0aGUgcHJvcGVydHkKKyAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0
d2VlbiBhY3Rpb25zOiByZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5l
dyBwcm9wZXJ0eQorICAgIC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRv
bS4gSWYgd2UncmUgc3RvcmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSwgdGhl
bgorICAgIC8vIGFic2VuY2UgbWVhbnMgdG9wLiBUbyBtYWtlIHRoaXMgd29yaywgd2UgaGF2ZSB0
byB3YXRjaCBvdXQgZm9yIHRoZSBjYXNlIHdoZXJlIHR3byBzdHJ1Y3R1cmVzLCBTMSBhbmQKKyAg
ICAvLyBTMiwgc2hhcmUgdGhlIHNhbWUgSW5mZXJyZWRUeXBlVGFibGUgYW5kIG5laXRoZXIgb2Yg
dGhlbSBpbml0aWFsbHkga25vdyBhYm91dCBwcm9wZXJ0eSBQLiBTMSBtYXkKKyAgICAvLyB3YW50
IHRvIGFkZCBQIHdpdGhvdXQgYSB0eXBlLCB3aGlsZSBTMiBtYXkgd2FudCB0byBhZGQgUCB3aXRo
IGEgdHlwZS4gSWYgUzEgYWRkZWQgUCBhbmQgdXNlZCBhYnNlbmNlCisgICAgLy8gdG8gaW5kaWNh
dGUgVG9wLCB0aGVuIFMyIHdvdWxkIHVzZSB0aGF0IGFic2VuY2UgdG8gbWVhbiBCb3R0b20gYW5k
IHdvdWxkIGVuZCB1cCBjcmVhdGluZyBhIG5vbi1Ub3AKKyAgICAvLyBlbnRyeSBpbiB0aGUgdGFi
bGUuIFRoZW4gUzEgd291bGQgZm9yZ2V0IHRoYXQgaXQgd2FudGVkIFRvcCwgYW5kIHdvdWxkIHVz
ZSBTMidzIHR5cGUuIENsZWFybHksCisgICAgLy8gdGhhdCdzIGJhZC4gV2UgYXZvaWQgc3VjaCBj
b25mdXNpb24gYnkgZW5zdXJpbmcgdGhhdCBhIHRyYW5zaXRpb24gYWx3YXlzIGFkZHMgYW4gZW50
cnkuIEhlbmNlLAorICAgIC8vIGFic2VuY2UtbWVhbnMtYm90dG9tIG9ubHkgY29tZXMgaW50byBw
bGF5IGZvciBwcm9wZXJ0aWVzIGFkZGVkIGJlZm9yZSB0aGUgSW5mZXJyZWRUeXBlVGFibGUgd2Fz
CisgICAgLy8gY3JlYXRlZC4KKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJp
bmdJbXBsPiwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4sIElkZW50aWZpZXJSZXBIYXNoLCBI
YXNoVHJhaXRzPFVuaXF1ZWRTdHJpbmdJbXBsKj4+IFRhYmxlVHlwZTsKKyAgICAKKyAgICBUYWJs
ZVR5cGUgbV90YWJsZTsKKworICAgIC8vIFdlIG9ubHkgZ3JhYiB0aGlzIGxvY2sgd2hlbiB3ZSdy
ZSBkb2luZyBtb2RpZmljYXRpb25zIG9uIHRoZSBtYWluIHRocmVhZCwgb3IgcmVhZHMgb24gdGhl
IGNvbXBpbGVyCisgICAgLy8gdGhyZWFkLiBUaGUgY29tcGlsZXIgdGhyZWFkIGlzIG5vdCBhbGxv
d2VkIHRvIGRvIG1vZGlmaWNhdGlvbnMuCisgICAgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJsZV9o
CisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZp
c2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzExODksOCBAQCBpbmxpbmUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAog
ICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJp
YnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTEyMjcs
MjkgKzEyMjksNDAgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAog
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkg
PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
b2Zmc2V0KSkgeworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKAorICAgICAgICBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKKyAgICBpZiAobmV3U3RydWN0dXJl
KSB7CisgICAgICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAor
ICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1
dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIAogICAgICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5
KCk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRoaXMtPnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KHZtLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Cisg
ICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
CiAgICAgICAgIH0KIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAg
QVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAg
ICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3
UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgIGJvb2wgaGFzSW5m
ZXJyZWRUeXBlOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogICAgIGlmIChvZmZzZXQgIT0g
aW52YWxpZE9mZnNldCkgewogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3Vy
cmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBlKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT53
aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Cisg
ICAgICAgIH0KKwogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0
KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIApAQCAtMTI2OCwxNiAr
MTI4MSwxOSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAg
Ly8gd2Ugd2FudC4KICAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Rmly
ZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOwogICAgIAotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUp
OworICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKAor
ICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwg
c2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1
cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAg
ICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9y
YWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CisgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+
aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3Rv
cmFnZUlmTmVjZXNzYXJ5KHZtLCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250
YWluc1JlYWRPbmx5UHJvcGVydGllcygpOworICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNldENvbnRh
aW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzMzUs
OCArMTM1MSwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBpZiAo
c3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdC
dXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2Fw
YWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0g
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICBib29sIHNob3VsZE9wdGlt
aXplID0gZmFsc2U7CisgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24o
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKKyAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICBwdXREaXJl
Y3Qodm0sIG9mZnNldCwgdmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MCwx
MSArMzUwLDE1IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAg
ICBlbHNlCiAgICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKIAor
ICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdl
dCgpOworCiAgICAgZm9yIChzaXplX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJl
LT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3Bl
cnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOworICAg
ICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5Q
cmV2aW91cy5nZXQoKSkpCisgICAgICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVl
OwogICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5
VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNDY0
LDYgKzQ2OCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAg
ICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+
bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OworICAgIHRyYW5zaXRpb24tPm1faW5mZXJy
ZWRUeXBlVGFibGUuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5m
ZXJyZWRUeXBlVGFibGUuZ2V0KCkpOwogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCkBAIC00NzksNiArNDg0LDI0IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKIAogU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewor
ICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBzb21lIGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRp
cmVjdGx5IHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnkgcmF0aGVyIHRoYW4KKyAgICAvLyBjYWNo
aW5nIHRoZSByZW1vdmFsLiBXZSBjYW4gZml4IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBt
dXN0IHJlbWVtYmVyIHRvIGRvIHNvLCBpZiB3ZSBldmVyIHRyeQorICAgIC8vIHRvIG9wdGltaXpl
IHRoaXMgY2FzZS4KKyAgICAvLworICAgIC8vIC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkg
c3RlYWwgdGhlIHByb3BlcnR5IHRhYmxlLCBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJs
ZSBiZWNhdXNlIHRoZXkKKyAgICAvLyAgIGNhbiBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxv
b2tpbmcgYXQgcGFzdCB0cmFuc2l0aW9ucy4gVGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFi
bGUgb25seQorICAgIC8vICAgZ3JldyBhbmQgbmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92
YWxzLCB3ZSdkIGhhdmUgdG8gY2hhbmdlIHRoZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRp
b24KKyAgICAvLyAgIGNvZGUgdG8gaGFuZGxlIGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dp
YyB0byBnZXQgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0CisgICAg
Ly8gICBsYWNrcyBhIHByb3BlcnR5IHRhYmxlIGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2gg
dGhlIHNldCBvZiB0cmFuc2l0aW9ucyBzaW5jZSB0aGUgbGFzdAorICAgIC8vICAgc3RydWN0dXJl
IHRoYXQgaGFkIGEgcGlubmVkIHRhYmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBi
ZSBjaGFuZ2VkIHRvIGhhbmRsZSBjYWNoZWQKKyAgICAvLyAgIHJlbW92YWxzLgorICAgIC8vCisg
ICAgLy8gLSBJbmZlcnJlZFR5cGVUYWJsZSBhc3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIg
aGFwcGVuZWQuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIGlmIHdlIGNvdWxkCisgICAgLy8gICBy
ZW1vdmUgYSBwcm9wZXJ0eSBhbmQgdGhlbiByZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNl
bmNlIG1lYW5zIHRvcCIgb3B0aW1pemF0aW9uIHdvdWxkbid0CisgICAgLy8gICB3b3JrIGFueW1v
cmUsIHVubGVzcyByZW1vdmFsIGFsc28gZWl0aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChi
eSBkb2luZyBzb21ldGhpbmcgZXF1aXZhbGVudCB0bworICAgIC8vICAgaGFzQmVlbkRpY3Rpb25h
cnkpIG9yIGJ5IHN0cm9uZ2x5IG1hcmtpbmcgdGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0
aGF0IGl0IGlzIG5vdCBhYnNlbnQsIGJ1dAorICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBl
bnRyeS4KKyAgICAKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlv
bmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CkBAIC04NDEsNiArODY0LDQzIEBAIHZvaWQg
U3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVy
bmFsUHJvcGVydGllcyh0cnVlKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVl
U2xvdygKKyAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkT3B0aW1pemUsCisgICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFBy
b3BlcnR5QWdlIGFnZSkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOworICAgIEFTU0VS
VCghaGFzQmVlbkRpY3Rpb25hcnkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5
cGUgdGFibGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0Mg
YWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5CisgICAgLy8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUg
cHJvcGVydHkgbWFwLgorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRU
eXBlVGFibGUuZ2V0KCk7CisgICAgaWYgKCF0YWJsZSkgeworICAgICAgICB0YWJsZSA9IEluZmVy
cmVkVHlwZVRhYmxlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgICAgICBtX2luZmVycmVkVHlwZVRhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAg
IH0KKworICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJs
ZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0
IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkg
b3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBt
dXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUp
OworCisgICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFBy
b3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51
aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5KTsKKworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAg
ICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1h
a2VUb3Aodm0sIHByb3BlcnR5TmFtZSwgYWdlKTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVk
VHlwZSA9IGZhbHNlOworICAgIH0KK30KKwogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAog
UHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyogcHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7
CkBAIC0xMDU4LDYgKzExMTgsOCBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpOwogICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5z
YWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsK
KworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsK
IH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklU
TG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlw
ZVRhYmxlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgog
I2luY2x1ZGUgIkpTVHlwZS5oIgpAQCAtODEsMTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1h
cEVudHJ5IHsKICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKICAgICB1aW50OF90IGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5
cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRoZXIgb3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVy
cmVkIHR5cGUgaW4gdGhlIGluZmVycmVkIHR5cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZh
c3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0
eU1hcEVudHJ5KCkKICAgICAgICAgOiBrZXkobnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52
YWxpZE9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJy
ZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVj
dCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNl
dChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhh
c0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1
dGVzID09IGF0dHJpYnV0ZXMpOwogICAgIH0KQEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAK
ICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5
T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAg
IFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQg
aW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3aWxsIGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3Np
Ymx5IGhvbGRpbmcgdGhlCiAgICAgLy8gU3RydWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3Vh
cmFudGVlIHdoZXRoZXIgdGhlIGxvY2sgaXMgaGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIK
QEAgLTQ4MSw2ICs0ODYsNDAgQEAgcHVibGljOgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFy
dFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAg
IGJvb2wgaGFzSW5mZXJyZWRUeXBlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISFt
X2luZmVycmVkVHlwZVRhYmxlOworICAgIH0KKworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRU
eXBlRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0YWJsZS0+Z2V0KHVpZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9y
Rm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRU
eXBlKiByZXN1bHQgPSBpbmZlcnJlZFR5cGVGb3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQtPmRlc2NyaXB0b3IoKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRp
b24oCisgICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGlj
dGlvbmFyeSgpIHx8ICghc2hvdWxkT3B0aW1pemUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6TmV3UHJv
cGVydHkpOworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JS
ZXBsYWNlKAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVl
bkRpY3Rpb25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFs
dWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRU
eXBlVGFibGU6Ok9sZFByb3BlcnR5KTsKKyAgICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVy
ZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWlu
ZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1hdGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxk
IGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCkBAIC02MzIsNiArNjcxLDkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2lsbFN0b3JlVmFsdWVTbG93KAorICAgICAgICBWTSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFBy
b3BlcnR5QWdlKTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3Ro
ID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25F
dmFsUHV0QnlJZCA9IDUxMjsKIApAQCAtNjU1LDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8g
U2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0
IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJv
cGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPElu
ZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxp
bmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxF
X0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNldCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRf
Zml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsMTkgKzc1
LDE5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAogQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwot
ICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBQcm9w
ZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5l
Y2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQotICAg
ICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5
ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0dXJuIGVu
dHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CiB9CiAgICAgCiBBTFdBWVNf
SU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBoYXNJbmZl
cnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBo
YXNJbmZlcnJlZFR5cGUpOworfQorCitBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0
dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSkKK3sKICAgICBBU1NFUlQoIWlzQ29tcGls
YXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBp
bmZvKCkpOwogCkBAIC0xMDEsNiArMTAxLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OgogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJp
YnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKKyAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+
aGFzSW5mZXJyZWRUeXBlOwogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYg
KzUxLDcgQEAKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllci5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIklu
ZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKQEAgLTI0MSw2ICsyNDIs
OCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvcGVy
dHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRo
aXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVy
cmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAg
ZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBleGNlcHRpb25TdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDgg
QEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJl
PiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRU
eXBlVGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0
YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7CiAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwpJbmRleDogU291
cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
fTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4gc3RydWN0IEhhc2hUYWJs
ZUFkZFJlc3VsdCB7CisgICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdCgpIDogaXNOZXdFbnRyeShm
YWxzZSkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdChJdGVyYXRvclR5cGUgaXRlciwg
Ym9vbCBpc05ld0VudHJ5KSA6IGl0ZXJhdG9yKGl0ZXIpLCBpc05ld0VudHJ5KGlzTmV3RW50cnkp
IHsgfQogICAgICAgICBJdGVyYXRvclR5cGUgaXRlcmF0b3I7CiAgICAgICAgIGJvb2wgaXNOZXdF
bnRyeTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261334</attachid>
            <date>2015-09-16 16:04:00 -0700</date>
            <delta_ts>2015-09-17 13:53:49 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>195777</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgw
MDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07
CisJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
OTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQx
NEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRU
aHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAv
KiBDb2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNB
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJB
OEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBG
RkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZF
ODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQ
YXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZC
MUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5jcHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAw
NzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAv
KiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIg
LyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVy
TmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBC
QUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYw
IC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUy
MTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQv
TExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0
QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2Rl
VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTEx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJ
bmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5m
ZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1By
b3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9w
ZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8q
IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJy
YXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAw
RjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5
NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAq
LywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8s
CiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJ
CQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBA
IC00Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8q
IEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5o
ICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0
RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUy
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJG
MDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRB
Q0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0Iz
MyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZF
OTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAw
NkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICov
LApAQCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2
IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0
NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJG
QzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQx
LDYgKzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNh
ZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyog
REZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1
Mjk2LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEy
MDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyog
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBG
NTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRF
QzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcx
OUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5
NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAog
CQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8s
CiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFw
TG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2
MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0
NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMw
NkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJ
CQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4
NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5
REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZB
OTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1
NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0
OTcsNiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1
bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJ
CQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcx
REQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQw
MEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8q
IERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFC
ODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE4NTMsNiArMTg1MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBKdW1wKG1ha2VCcmFuY2goY29uZCkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoVGVz
dDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTY0IG1h
c2spCisgICAgeworICAgICAgICBtb3ZlKG1hc2ssIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJ
REFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwgcmVn
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1
bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIG1hc2spCiAgICAg
ewogICAgICAgICBsb2FkNjQoYWRkcmVzcywgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5k
SW52YWxpZGF0ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjA1LDYgKzYwNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKKyAgICBK
dW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRy
dXN0ZWRJbW02NCBtYXNrKQorICAgIHsKKyAgICAgICAgbW92ZShtYXNrLCBzY3JhdGNoUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIHJlZywgc2NyYXRjaFJlZ2lz
dGVyKTsKKyAgICB9CisKICAgICB2b2lkIHRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
ODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODYsNiArNjg2LDE1IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsK
KyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5
cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIp
OworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAg
ICAgIGppdC5icmFuY2hJZk5vdFR5cGUoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywg
c2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBlcnM6OkRvTm90SGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAg
ICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcwOSw2ICs3MTgsMTUgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHJ1
Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CiAKKyAgICAgICAgaWYgKEluZmVy
cmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1w
bCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIpOworICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hJ
Zk5vdFR5cGUoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlw
ZS0+ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBlcnM6OkRvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwor
ICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBo
YXZlIHR5cGUuXG4iKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihz
dHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1
dEJ5SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0IEBAIG5hbWVzcGFjZSBX
VEYgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0
cmluZ091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQ
dXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChjb21tYSwgIklzRGlyZWN0
Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7CiAKLSAgICBDU3RyaW5n
IHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJp
bnQoc3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6
a2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOworICAgIGlm
IChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMg
KzI2LDcwIEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5lIFB1dEJ5SWRGbGFnc19o
CiAKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGludHB0cl90IHsKICAgICBQ
dXRCeUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQorCisgICAgLy8gVGhpcyBm
bGFnIGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0LiBUaGF0IG1lYW5zIHRo
YXQgd2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBjaGVja2luZyBpZiB0aGUg
cHJvdG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEs
CisgICAgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCisKKyAgICAvLyBOT1RFOiBU
aGUgdmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20uCisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJy
ZWQgdHlwZSBpbnZvbHZlcyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFu
ZCB0aGVuCisgICAgLy8gdXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRo
ZSBzZWNvbmRhcnkgbWFzazoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlU
eXBlTWFzaykgeworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAg
IC8vICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAg
Ly8gICAgIC4uLgorICAgIC8vICAgICB9CisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAvLyBjYXNlIFB1dEJ5
SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIC8vICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKKyAgICAvLyAg
ICAgYnJlYWs7CisgICAgLy8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCisg
ICAgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRo
ZSBzZWNvbmRhcnkgdHlwZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQdXRCeUlkUHJpbWFyeVR5
cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0
dXJlIElELgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
ID0gMHg0LCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorCisgICAgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRv
bSA9IDB4MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCisgICAgUHV0
QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJ
bnQzMiA9IDB4MTgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAorICAg
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdCA9IDB4MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
ID0gMHgzOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKIH07CiAKK2lubGlu
ZSBQdXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJlSUQgaWQpCit7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihzdGF0
aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKSA8PCAzKTsKKyNlbHNlCisgICAgUHV0QnlJZEZsYWdz
IHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKTsKKyAgICBBU1NFUlQoIShy
ZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbmRpZgorfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb2RlU3RydWN0dXJlSUQoUHV0QnlJ
ZEZsYWdzIGZsYWdzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFN0cnVjdHVyZUlEPihmbGFncyA+PiAzKTsKKyNlbHNlCisgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spOworI2Vu
ZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3Ry
dWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQp
KTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CkBAIC0xMDMsNyArMTAzLDggQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQ
dXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0
aW9uU2V0LCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
KyAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBu
ZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCkBAIC0xNjIsNyArMTYzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3Ap
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KQEAgLTE5Myw3ICsxOTQsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50
ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0yMDYsNyArMjA4LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5z
aXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5l
d1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQs
IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZl
cnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzI5LDggKzMzMiwxMCBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28s
IGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0KKyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlw
dG9yRm9yKHVpZCkpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJp
YW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0zNTYsMTMgKzM2MSwxNiBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAg
ICAKICAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3Ry
dWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJl
LCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1
bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJh
bnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICgh
ZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBt
X25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0
ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsK
KyAgICBtX3JlcXVpcmVkVHlwZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVs
c2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9w
ZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29u
c3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3Vs
dC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9u
KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYg
Kzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJl
c3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRp
b25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
IHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC04NSw2ICs5MCw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojpz
ZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdU
Rjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5m
ZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwx
MiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYg
KG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9yZXF1aXJlZFR5cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFj
ZToKKyAgICBjYXNlIFJlcGxhY2U6IHsKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsK
ICAgICAgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZv
aWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2Fz
ZSBSZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIs
IGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgp
LCAiPiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCks
IGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCks
CisgICAgICAgICAgICAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
VHJhbnNpdGlvbjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9u
OiAiLCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAg
ICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsi
LAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9m
ZnNldCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0
aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJl
ZFR5cGUoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRl
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1
YmxpYzoKICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1
dEJ5SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0
YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1
cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlP
ZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFBy
b3BlcnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2
ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9
CiAKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdy
aXRlc1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHBy
aXZhdGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNl
dDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJQYXJz
ZXJNb2Rlcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlJlZ0V4cC5o
IgogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaCIKQEAgLTk4LDEyICs5NywxMCBAQCBzdHJ1Y3QgVW5saW5rZWRJbnN0cnVj
dGlvbiB7CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQogICAg
IFVubGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2Rl
OyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBv
cGVyYW5kOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsg
dS5wdXRCeUlkRmxhZ3MgPSBmbGFnczsgfQogICAgIHVuaW9uIHsKICAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
OwotICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzOwogICAgIH0gdTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiwzOSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICB0b3VjaChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwogICAgIH0KLSAgICAKKworICAg
IC8vIE5vdGUgdGhhdCBmb3IgYW55IHdhdGNocG9pbnQgdGhhdCBpcyB2aXNpYmxlIGZyb20gdGhl
IERGRywgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIHdyaXRlIGNvZGUgbGlrZToKKyAgICAvLwor
ICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgpCisg
ICAgLy8KKyAgICAvLyBDb25jdXJyZW50bHkgdG8gdGhpcywgdGhlIERGRyBjb3VsZCBkbzoKKyAg
ICAvLworICAgIC8vIGlmICh3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBwZXJmb3JtIG9w
dGltaXphdGlvbnM7CisgICAgLy8gaWYgKCF3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBy
ZXRyeSBjb21waWxhdGlvbjsKKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGUgREZHIGFsZ29y
aXRobSBpcyB3aWRlc3ByZWFkLCBhbmQgc291bmQsIGJlY2F1c2UgZmlyZUFsbCgpIGFuZCBpbnZh
bGlkYXRlKCkgd2lsbCBsZWF2ZQorICAgIC8vIHRoZSB3YXRjaHBvaW50IGluIGEgIWlzU3RpbGxW
YWxpZCgpIHN0YXRlLiBIZW5jZSwgaWYgZmlyZUFsbCgpIG9yIGludmFsaWRhdGUoKSBpbnRlcmxl
YXZlZCBiZXR3ZWVuCisgICAgLy8gdGhlIGZpcnN0IGlzU3RpbGxWYWxpZCgpIGNoZWNrIGFuZCB0
aGUgc2Vjb25kIG9uZSwgdGhlbiBpdCB3b3VsZCBzaW1wbHkgY2F1c2UgdGhlIERGRyB0byByZXRy
eQorICAgIC8vIGNvbXBpbGF0aW9uIGxhdGVyLgorICAgIC8vCisgICAgLy8gQnV0LCBpZiB5b3Ug
Y2hhbmdlIHNvbWUgcGllY2Ugb2Ygc3RhdGUgdGhhdCB0aGUgREZHIG1pZ2h0IG9wdGltaXplIGZv
ciwgYnV0IGludmFsaWRhdGUgdGhlCisgICAgLy8gd2F0Y2hwb2ludCBieSBkb2luZzoKKyAgICAv
LworICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgp
CisgICAgLy8KKyAgICAvLyB0aGVuIHRoZSBERkcgd291bGQgbmV2ZXIga25vdyB0aGF0IHlvdSBp
bnZhbGlkYXRlZCBzdGF0ZSBiZXR3ZWVuIHRoZSB0d28gY2hlY2tzLgorICAgIC8vCisgICAgLy8g
VGhlcmUgYXJlIHR3byB3YXlzIHRvIHdvcmsgYXJvdW5kIHRoaXM6CisgICAgLy8KKyAgICAvLyAt
IENhbGwgZmlyZUFsbCgpIHdpdGhvdXQgYSBpc0JlaW5nV2F0Y2hlZCgpIGNoZWNrLiBUaGVuLCB0
aGUgREZHIHdpbGwga25vdyB0aGF0IHRoZSB3YXRjaHBvaW50IGhhcworICAgIC8vICAgYmVlbiBp
bnZhbGlkYXRlZCB3aGVuIGl0IGRvZXMgaXRzIHNlY29uZCBjaGVjay4KKyAgICAvLworICAgIC8v
IC0gRG8gbm90IGV4cG9zZSB0aGUgd2F0Y2hwb2ludCBzZXQgdG8gdGhlIERGRyBkaXJlY3RseSwg
YW5kIGhhdmUgeW91ciBvd24gd2F5IG9mIHZhbGlkYXRpbmcgd2hldGhlcgorICAgIC8vICAgdGhl
IGFzc3VtcHRpb25zIHRoYXQgdGhlIERGRyB0aHJlYWQgdXNlZCBhcmUgc3RpbGwgdmFsaWQgd2hl
biB0aGUgREZHIGNvZGUgaXMgaW5zdGFsbGVkLgogICAgIGJvb2wgaXNCZWluZ1dhdGNoZWQoKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKGlzRmF0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNTEsNiArMTI1MSw4IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRDb25zdGEKIAogICAgIGludCBpbmRl
eCA9IG1fbmV4dENvbnN0YW50T2Zmc2V0OwogCisgICAgaWYgKHNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZSAmJiB2LmlzSW50MzIoKSkK
KyAgICAgICAgdiA9IGpzRG91YmxlTnVtYmVyKHYuYXNOdW1iZXIoKSk7CiAgICAgRW5jb2RlZEpT
VmFsdWVXaXRoUmVwcmVzZW50YXRpb24gdmFsdWVNYXBLZXkgeyBKU1ZhbHVlOjplbmNvZGUodiks
IHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiB9OwogICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2pzVmFsdWVNYXAuYWRkKHZhbHVlTWFwS2V5LCBtX25leHRDb25zdGFudE9mZnNl
dCk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CkBAIC0yMTEyLDcgKzIxMTQsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8v
IG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVy
ZSBjaGFpbgotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChQdXRCeUlkTm9uZSk7IC8vIGlzIG5v
dCBkaXJlY3QKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PihQdXRC
eUlkTm9uZSkpOyAvLyBpcyBub3QgZGlyZWN0CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0y
MTM0LDcgKzIxMzYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVj
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7IC8vIHN0cnVjdHVyZSBjaGFpbiAodW51c2VkIGlmIGRpcmVjdCkKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0
aWNfY2FzdDxpbnQ+KChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJv
cGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJ
c0RpcmVjdCA6IFB1dEJ5SWROb25lKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3Bl
Y05vbmUpCiAgICAgewotICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCk7
CisgICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0LCBhZG1pdHRlZFR5cGVz
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSw3ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSks
IHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJh
Y3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJy
YXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgyOSwxMCArMTgyOSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1
cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSkpIHsKLSAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9n
cmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOworICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
RmlndXJlIG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEg
Y29uc3RhbnQsIG9yIG1heWJlCiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3Vi
dGxlPwpAQCAtMTg0MSwyMiArMTg0MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2
ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QK
ICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVz
W2ldLm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
IHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJl
c3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE4ODAsNyAr
MTg3MCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFk
eSBlbnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1
Y3R1cmVTZXQoKTsKICAgICAgICAgCkBAIC0xODg4LDEyICsxODc3LDI0IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0
aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1
Y3R1cmUgY2hlY2sKICAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24n
dC4KICAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
IGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25l
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAg
ICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY090aGVyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBm
aWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAgIAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCwg
YWRtaXR0ZWRUeXBlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMDg0
LDEzICsyMDg1LDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNz
RGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLCBkYXRhLm9mZnNldCk7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VI
ZWFwVG9wKCk7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50
aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXTsKKworICAgICAgICAvLyBGSVhNRTogVGhl
IHBhcnQgb2YgdGhpcyB0aGF0IGhhbmRsZXMgaW5mZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVsaWVz
IG9uIEFJIGtub3dpbmcgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyByaWdodCBub3cuIFRoYXQn
cyBwcm9iYWJseSBub3Qgb3B0aW1hbC4gSW4gc29tZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0gYW4g
b3B0aW1pemF0aW9uICh1c3VhbGx5CisgICAgICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFu
IEFJLCBtYXliZSBieSBDU0UgZm9yIGV4YW1wbGUpIHRoYXQgb2JzY3VyZXMgQUkncyB2aWV3IG9m
IHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIEdldEJ5T2Zmc2V0
IHJ1bnMuIEN1cnJlbnRseSwgd2hlbiB0aGF0IGhhcHBlbnMsIHdlJ2xsIGhhdmUgdG8gcmVseSBl
bnRpcmVseQorICAgICAgICAvLyBvbiB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIHdhcyBh
YmxlIHRvIHByb3ZlLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9ncmFwaC5pbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KSwgdWlkLCBkYXRhLm9mZnNldCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisK
KyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJz
ZXIgY2FtZSB1cCB3aXRoIGlzIGJldHRlci4KKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlRnJv
bVBhcnNpbmc7CisgICAgICAgIHR5cGVGcm9tUGFyc2luZy5zZXQobV9ncmFwaCwgZGF0YS5pbmZl
cnJlZFR5cGUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZUZyb21QYXJzaW5nKTsKKworICAgICAgICAvLyBJZiB3ZSBkZWNpZGUgdGhh
dCB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbnkgdmFsdWUgdGhhdCB0aGlzIGNhbiByZXR1cm4sIHRo
ZW4gaXQncyBwcm9iYWJseQorICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb21waWxhdGlvbiB3YXMg
YWxyZWFkeSBpbnZhbGlkYXRlZC4KKyAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAg
ICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisKKyAgICAgICAgZm9yTm9kZShub2Rl
KSA9IHZhbHVlOworICAgICAgICBpZiAodmFsdWUubV92YWx1ZSkKKyAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC0yMTIwLDYgKzIxMzcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRp
bWVzLCBidXQgdGhpcyBub2RlIGlzIEZUTC1vbmx5LgogICAgICAgICBtX3N0YXRlLnNldEZvdW5k
Q29uc3RhbnRzKHRydWUpOwogICAgICAgICAKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlk
ZW50aWZpZXJOdW1iZXJdOworCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSByZXN1bHQ7CkBAIC0yMTI5LDE4ICsyMTQ4LDI5IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJn
ZShzZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5r
aW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiB7CisgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5t
ZXRob2QoKS5jb25zdGFudCgpLAorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3Vs
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAgICAgIHRoaXNS
ZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKmdl
dENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0
KTsKKworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDogeworICAgICAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIHVpZCwg
bV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0
aW9uKQpAQCAtMjE2Myw2ICsyMTkzLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAg
ICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdGluZ1ZhbHVlOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
QEAgLTIxNzAsNiArMjIwMiwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlm
ICh0aGlzU2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworICAgICAgICAg
ICAgdGhpc1ZhbHVlLmZpbHRlcihtX2dyYXBoLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAg
ICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25z
LmFwcGVuZCgKQEAgLTIxODUsNiArMjIyMiw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1pdCwg
dHJhbnNpdGlvbnMpOwogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdl
U3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpID0gcmVzdWx0aW5nVmFsdWU7CisgICAgICAgIGlmICghIW9yaWdpbmFsVmFsdWUgJiYgIXJl
c3VsdGluZ1ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIyNjQsMTMgKzIzMDQsMTMgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZs
dXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3Ry
dWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAg
ICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIFB1
dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAog
ICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLAogICAgICAgICAgICAgICAg
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAg
ICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5z
aXRpb25zOwpAQCAtMjYxNSw5ICsyNjU1LDkgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZp
bHRlcigKLSAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQp
CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVj
dWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQogewotICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFw
aCwgc2V0KSA9PSBGaWx0cmF0aW9uT0spCisgICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBz
ZXQsIGFkbWl0dGVkVHlwZXMpID09IEZpbHRyYXRpb25PSykKICAgICAgICAgcmV0dXJuIEZpbHRy
YXRpb25PSzsKICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgIHJldHVybiBDb250
cmFkaWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDU2
IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0VHlwZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHN3aXRj
aCAoZGVzY3JpcHRvci5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgor
ICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvb2xlYW46CisgICAgICAgIHNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBzZXRUeXBlKFNwZWNPdGhl
cik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAg
ICAgIHNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHNldFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHNl
dChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1lcmdlKFNwZWNP
dGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0Ogor
ICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBzZXRUeXBlKGdyYXBo
LCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG1ha2VIZWFwVG9wKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldCgKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKK3sKKyAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIGlmIChjbG9iYmVyU3RhdGUg
PT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsK
K30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgm
IGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KHJlcHJlc2VudGF0aW9uID09IE5vZGVSZXN1bHREb3VibGUpIHsKQEAgLTE4OSw4ICsyMzksMjIg
QEAgYm9vbCBBYnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBv
bGRNZSAhPSAqdGhpczsKIH0KIAotRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorYm9vbCBBYnN0cmFj
dFZhbHVlOjppc1R5cGUoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGluZmVycmVkVHlwZSkgY29uc3QKIHsKKyAgICBBYnN0cmFjdFZhbHVlIHR5cGVWYWx1ZTsK
KyAgICB0eXBlVmFsdWUuc2V0KGdyYXBoLCBpbmZlcnJlZFR5cGUpOworCisgICAgQWJzdHJhY3RW
YWx1ZSBtZXJnZWRWYWx1ZSA9ICp0aGlzOworICAgIG1lcmdlZFZhbHVlLm1lcmdlKHR5cGVWYWx1
ZSk7CisKKyAgICByZXR1cm4gbWVyZ2VkVmFsdWUgPT0gdHlwZVZhbHVlOworfQorCitGaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcigKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCit7Cisg
ICAgQVNTRVJUKCEoYWRtaXR0ZWRUeXBlcyAmIFNwZWNDZWxsKSk7CisgICAgCiAgICAgaWYgKGlz
Q2xlYXIoKSkKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKICAgICAKQEAgLTE5OCw3ICsy
NjIsNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgLy8g
aGF2aW5nIHN0cnVjdHVyZXMsIGFycmF5IG1vZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjMKICAgICAK
LSAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOworICAgIG1f
dHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgfCBhZG1pdHRlZFR5cGVz
OwogICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsK
ICAgICBtX3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgIApAQCAtMzE1LDYgKzM3OSwxMyBA
QCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihjCiAgICAgcmV0dXJuIENv
bnRyYWRpY3Rpb247CiB9CiAKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEFic3RyYWN0VmFsdWUgZmlsdGVyVmFsdWU7CisgICAgZmlsdGVyVmFsdWUuc2V0
KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZmlsdGVyKGZpbHRlclZhbHVlKTsKK30K
Kwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8gV2Ug
Y291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZSBjb250cmF2ZW5lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNw
ZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKQEAgLTIxNCw3ICsyMTUs
MTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgp
OwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBz
ZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKyAgICB2b2lkIHNl
dChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSk7CisKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5v
ZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogPSBudWxscHRyKTsKICAgICB2b2lkIGZpeFR5
cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGUqKTsKICAgICAKQEAgLTI4MCwxNyArMjg0
LDI3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiAhKG1f
dHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAgfQorCisgICAgYm9vbCBpc1R5cGUoR3JhcGgmLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKSBjb25zdDsKKworICAgIC8vIEZpbHRlcnMg
dGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBJZiB0aGUgYWRtaXR0ZWRU
eXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCisgICAgLy8gaW1wbGljaXRseSBmaWx0
ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3aGljaCBhcmUg
dXN1YWxseSBhIHN1YnNldCBvZgorICAgIC8vIFNwZWNDZWxsLiBIZW5jZSwgYWZ0ZXIgdGhpcyBj
YWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgbm9uLWNlbGwgbWVtYmVycy4g
QnV0LCB5b3UgY2FuCisgICAgLy8gdXNlIGFkbWl0dGVkVHlwZXMgdG8gcHJlc2VydmUgc29tZSBu
b24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0IGl0J3Mgd3JvbmcgZm9yIGFkbWl0dGVkVHlwZXMgdG8g
b3ZlcmxhcAorICAgIC8vIHdpdGggU3BlY0NlbGwuCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0
ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5
cGVzID0gU3BlY05vbmUpOwogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBo
JiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJh
eU1vZGVzKEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1bGF0
ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVu
VmFsdWUmIHZhbHVlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihjb25zdCBBYnN0cmFj
dFZhbHVlJik7CisKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIEZpbHRyYXRpb25SZXN1bHQgY2hh
bmdlU3RydWN0dXJlKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgYm9v
bCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wgdmFsaWRhdGUo
SlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDkgKzIwNiw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQs
IEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29s
IGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJu
YWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOwotICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSog
aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
LSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNl
dCk7CisgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYs
IE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQp
OwogCiAgICAgLy8gQ3JlYXRlIGEgcHJlc2VuY2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYmFz
ZWQgb24gc29tZSBrbm93biBvZmZzZXQgYW5kIHN0cnVjdHVyZSBzZXQuIERvZXMgbm90CiAgICAg
Ly8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25kaXRpb24sIGJ1dCBpdCBtYXkgcmV0dXJu
IGEgbnVsbCBvbmUgaWYgaXQgZW5jb3VudGVycyBhIGNvbnRyYWRpY3Rpb24uCkBAIC0yMzA3LDcg
KzIzMDYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJl
ZFR5cGUsIE5vZGVUeXBlIG9wKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMTgsMTMgKzIzMTksMTcgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9m
ZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CisgICAgbV9ncmFw
aC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpOwogICAgIAogICAgIE5vZGUqIGdl
dEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlv
biksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CiAKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9
CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQor
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAorICAgIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsCisgICAgTm9kZSogdmFsdWUpCiB7CiAg
ICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQp
KQpAQCAtMjMzNSw2ICsyMzQwLDggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBp
bmZlcnJlZFR5cGU7CisgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5
cGUpOwogICAgIAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9w
SW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ5
LDcgKzI0NTYsOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJu
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9k
ZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90
eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJh
c2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAg
cmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5v
ZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3As
IG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAg
Ly8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTU1LDEzICsyNTYz
LDEzIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0
cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChK
U09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+
KCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVj
ay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAg
ICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJl
cl07Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQo
KS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUg
bG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUg
dGhlCiAgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjI2
LDkgKzI2MzQsMTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBp
ZiAoY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0
YW50KTsKICAgICAgICAgfQorCisgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZl
cnJlZFR5cGU7CisgICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHRoaXNUeXBlID0gbV9ncmFw
aC5pbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICAg
ICAgaW5mZXJyZWRUeXBlLm1lcmdlKHRoaXNUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAg
ICAgICAgCiAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
ICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZz
ZXQoKSwgbG9hZE9wKTsKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBpbmZlcnJlZFR5cGUsIGxvYWRPcCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwpAQCAtMjYzOSw3ICsyNjU2LDcgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogICAgIFJFTEVBU0VfQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJl
c2VuY2VMaWtlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFu
dC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZVB1dEJ5
T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQo
KSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjc5OCw2ICsyODE1LDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CisKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkKKyAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJJbmZlcnJlZFR5cGUodmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CiAgICAgICAgIAogICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CkBAIC0yODU0LDYgKzI4NzQsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gdmFyaWFudC5vZmZz
ZXQoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CisgICAgICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IHZhcmlhbnQucmVxdWlyZWRUeXBlKCk7Cisg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoZGF0YS0+aW5mZXJyZWRUeXBlKTsK
ICAgICAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBQdXRCeU9mZnNldCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0
U3RhdGUuY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBA
QCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kCiAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlv
bjoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgorICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAvLyBU
aGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJ
dCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVhcHMgaW50byB0aG9z
ZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0
IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4
OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgpAQCAtMzczLDcgKzM3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9m
ZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQucmVxdWlyZWRUeXBl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDgsNiArNDUwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNl
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VW
YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKIAogICAg
ICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNo
IENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAg
ICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZh
dWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KQEAgLTQ2Myw3ICs0NjYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3Rh
dHVzLmlzU2ltcGxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5udW1WYXJpYW50cygpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkg
PiAxICYmICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKQEAgLTY0MCw3ICs2NDMsOSBAQCBw
cml2YXRlOgogICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBjaGls
ZEVkZ2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5v
ZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgIHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcCkKICAg
ICB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
IApAQCAtNjU2LDYgKzY2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
JiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0
YS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50
aWZpZXJOdW1iZXI7CisgICAgICAgIGRhdGEuaW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwog
ICAgICAgICAKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVy
dHlTdG9yYWdlKTsKICAgICB9CkBAIC02NjQsOCArNjcwLDEwIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBj
aGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgCisKICAgICAgICAgYWRkQmFzZUNo
ZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KTsKKyAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldCwgaW5kZXhJbkJsb2NrLCBvcmlnaW4sIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgdmFy
aWFudC5yZXF1aXJlZFR5cGUoKSk7CiAKICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChLbm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOwpAQCAtNzMwLDYgKzczOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBBcmlzZXMg
d2hlbiB3ZSBwcnVuZSBNdWx0aUdldEJ5T2Zmc2V0LiBXZSBjb3VsZCBoYXZlIGEKICAgICAgICAg
ICAgIC8vIE11bHRpR2V0QnlPZmZzZXQgd2l0aCBhIHNpbmdsZSB2YXJpYW50IHRoYXQgY2hlY2tz
IGZvciBzdHJ1Y3R1cmUgUywKICAgICAgICAgICAgIC8vIGFuZCB0aGUgaW5wdXQgaGFzIHN0cnVj
dHVyZXMgUyBhbmQgVCwgZm9yIGV4YW1wbGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3Jp
Z2luLAogICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzZXQp
KSwgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorI2RlZmluZSBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSW5m
ZXJyZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGRvY3VtZW50cyB0aGUgREZHJ3MgZXhwZWN0YXRp
b24gZm9yIGFuIEluZmVycmVkVHlwZTogc3BlY2lmaWNhbGx5LCB0aGF0IHdlIHdhbnQgaXQgdG8g
aGF2ZSBhIGxpdmUKKy8vIEluZmVycmVkVHlwZSBvYmplY3QgYW5kIHRoYXQgdGhpcyBvYmplY3Qg
aGFzIHRoZSB0eXBlIHRoYXQgd2Ugb3JpZ2luYWxseSBzYXcuCisKK2NsYXNzIERlc2lyZWRJbmZl
cnJlZFR5cGUgeworcHVibGljOgorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoKQorICAgICAgICA6
IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBEZXNpcmVkSW5mZXJy
ZWRUeXBlKEluZmVycmVkVHlwZSogb2JqZWN0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGV4cGVjdGVkKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2V4
cGVjdGVkKGV4cGVjdGVkKQorICAgIHsKKyAgICB9CisKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBl
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29iamVjdChudWxs
cHRyKQorICAgICAgICAsIG1fZXhwZWN0ZWQoSW5mZXJyZWRUeXBlOjpUb3ApCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVj
dCAmJiBtX2V4cGVjdGVkOyB9CisKKyAgICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0OyB9CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZDsgfQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVj
dGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgbV9vYmplY3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2Jq
ZWN0CisgICAgICAgICAgICAmJiBtX2V4cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2V4cGVjdGVkID09IEluZmVycmVkVHlwZTo6VG9wOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURjo6UHRySGFzaDxJbmZlcnJlZFR5cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVk
Lmhhc2goKSAqIDc7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnBy
aW50KGluQ29udGV4dChtX2V4cGVjdGVkLCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlciht
X29iamVjdCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUqIG1fb2JqZWN0OworICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBtX2V4cGVjdGVkOworfTsKKworc3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBhLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVy
cmVkVHlwZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNo
IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3Rl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7
IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNp
b24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQCB2b2lkIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6CiAgICAgfQogfQogCit2b2lkIEluZmVycmVkVHlw
ZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAga2V5LmFkZChjb21tb24ud2F0
Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2ly
ZWRXYXRjaHBvaW50cygpIHsgfQogRGVzaXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CiAKQEAgLTkzLDYgKzk4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjph
ZGRMYXppbHkoY29uc3QKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5
KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJiBrZXkpCit7CisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkp
OworfQorCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMDgs
NiArMTE4LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAg
IG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAg
bV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAg
ICBtX2luZmVycmVkVHlwZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAK
IGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTExNiw3
ICsxMjcsOCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAg
ICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJl
ZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGls
bFZhbGlkKCkKLSAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxp
ZCgpOworICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkK
KyAgICAgICAgJiYgbV9pbmZlcnJlZFR5cGVzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0CkBAIC0xMjcsNiArMTM5LDcgQEAgdm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZh
bHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAg
ICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdz
LCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNv
bmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCks
ICJcbiIpOworICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQo
bV9pbmZlcnJlZFR5cGVzLCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRh
dGEuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5m
ZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKQEAgLTkxLDYgKzkyLDE4IEBAIHN0cnVjdCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG8KICAgICB9CiB9OwogCitzdHJ1Y3QgSW5mZXJy
ZWRUeXBlQWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERl
c2lyZWRJbmZlcnJlZFR5cGUmLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVl
bkludmFsaWRhdGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAha2V5LmlzU3RpbGxWYWxpZCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUm
IGtleSwgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5D
b250ZXh0KGtleSwgY29udGV4dCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFdh
dGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0
Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRApAQCAtMTU5LDYgKzE3MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQn
cyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFw
aDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBt
YWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXpp
bHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIEl0J3MgcmVjb21t
ZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVy
cmVkVHlwZUZvcigpLCB3aGljaCBkb2VzCisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgor
ICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAg
ICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIApAQCAtMTg2LDYgKzIwMywxMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNX
YXRjaGVkKGtleSk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZl
cnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNX
YXRjaGVkKGtleSk7CisgICAgfQogCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKQEAgLTE5Niw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFs
dWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBB
cnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlw
ZUFkYXB0b3I+IG1faW5mZXJyZWRUeXBlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luZmVy
cmVkVHlwZUNoZWNrLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAi
REZHUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpA
QCAtMTA5Miw2ICsxMDkzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3du
Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNr
KAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4SW5CbG9jaywgbm9kZS0+
b3JpZ2luLCBub2RlLT5jaGlsZDMoKS5ub2RlKCksCisgICAgICAgICAgICAgICAgbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGEoKS5pbmZlcnJlZFR5cGUpOwogICAgICAgICAgICAgc3BlY3VsYXRlRm9y
QmFycmllcihub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4OTgx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjEsMTIgKzI2MSwxNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9
IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlk
Iiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlmaWVycygp
W3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOwogICAgICAgICBvdXQu
cHJpbnQoIiwgIiwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQpKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGluZmVycmVkVHlwZSA9ICIsIGluQ29udGV4dChz
dG9yYWdlQWNjZXNzRGF0YS5pbmZlcnJlZFR5cGUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYg
KG5vZGUtPmhhc011bHRpR2V0QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVsdGlHZXRCeU9m
ZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJpZCIsIGRhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlm
aWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tpXSwgY29udGV4dCkpOworICAgICAg
ICAgICAgaWYgKGRhdGEuY2FzZXNbaV0ubWV0aG9kKCkua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiIChpbmZlcnJlZCB2YWx1ZSA9
ICIsIGluQ29udGV4dChpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoZGF0YS5jYXNlc1tpXS5zZXQo
KSwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdKSwgY29udGV4dCksICIpIik7
CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc011bHRpUHV0QnlPZmZzZXREYXRh
KCkpIHsKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpOwpAQCAtODg3LDYgKzg5MSwzOCBAQCBib29sIEdyYXBoOjppc1NhZmVU
b0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhz
dGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKIH0KIAorSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCit7
CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtleS5zdHJ1Y3R1cmUoKSk7CisgICAgCisgICAgYXV0
byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtX2lu
ZmVycmVkVHlwZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIElu
ZmVycmVkVHlwZSogdHlwZU9iamVjdCA9IGtleS5zdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9y
KGtleS51aWQoKSk7CisgICAgaWYgKCF0eXBlT2JqZWN0KSB7CisgICAgICAgIG1faW5mZXJyZWRU
eXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJl
ZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURl
c2NyaXB0b3IgPSB0eXBlT2JqZWN0LT5kZXNjcmlwdG9yKCk7CisgICAgaWYgKHR5cGVEZXNjcmlw
dG9yLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRvcCkgeworICAgICAgICBtX2luZmVycmVkVHlw
ZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRU
eXBlOjpUb3A7CisgICAgfQorICAgIAorICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCB0eXBl
RGVzY3JpcHRvcik7CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHR5cGVP
YmplY3QpOworICAgIHJlZ2lzdGVySW5mZXJyZWRUeXBlKHR5cGVEZXNjcmlwdG9yKTsKKworICAg
IC8vIE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0aGlzIGRlc2lyZWQgaW5m
ZXJyZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1heQorICAgIC8vIHBvaW50
IHRvIHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KKyAgICBtX3BsYW4ud2F0Y2hwb2lu
dHMuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlwZURlc2NyaXB0
b3IpKTsKKworICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKK30KKwogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAg
LTEwNjEsNyArMTA5Nyw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHko
SlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBi
YXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlz
Q2xvYmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAg
ICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2Ug
Y291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8g
Y29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTExMiwzNyBAQCBKU1Zh
bHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENv
bnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwog
fQogCitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0
OworICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
eworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNl
dCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIGlmIChjbG9iYmVy
U3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgcmVzdWx0LmNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJhY3RWYWx1ZSBHcmFw
aDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIGlmIChKU1ZhbHVlIHZh
bHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQpKSB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0aGlzLCAqZnJlZXplKHZh
bHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm4gaW5mZXJy
ZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCwgY2xvYmJlclN0
YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9wKCk7Cit9CisKIEpTVmFs
dWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVlIGJhc2UsIFNjb3BlT2Zm
c2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21lIGNvbmN1cnJlbmN5IHN0
b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVDb2RlUGFyc2VyLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg5ODEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRG
R1BsYW4uaCIKICNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisjaW5jbHVkZSAiREZH
UHJvcGVydHlUeXBlS2V5LmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAi
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCkBAIC02NzUsNiAr
Njc2LDI3IEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRp
bmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhp
cyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJh
Y2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0
KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICB2b2lkIHJlZ2lzdGVySW5mZXJyZWRUeXBl
KGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlLnN0cnVjdHVyZSgpKQorICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZS5z
dHJ1Y3R1cmUoKSk7CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBl
IHdlIGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhl
IGZ1dHVyZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNv
bnN0IFByb3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZl
cnJlZFR5cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlU
eXBlS2V5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJl
c0FyZVdhdGNoZWQpOworCisgICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0
eSBpbmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBh
YnN0cmFjdAorICAgIC8vIHZhbHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhl
IGdpdmVuIGFic3RyYWN0IHZhbHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZh
bHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUp
OwogICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sq
KTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1l
Kik7CkBAIC04NTYsNiArODc4LDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNz
OwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+
PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9w
ZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtleSwg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9taW5hdG9y
cyBtX2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7
CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0lu
ZmVycmVkVHlwZUNoZWNrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGlu
c2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwKKyAg
ICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCit7CisgICAgaW5zZXJ0aW9u
U2V0LmdyYXBoKCkucmVnaXN0ZXJJbmZlcnJlZFR5cGUodHlwZSk7CisgICAgCisgICAgc3dpdGNo
ICh0eXBlLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEZvcmNlT1NSRXhp
dCwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJv
b2xlYW46CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05v
bmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEJvb2xlYW5Vc2UpKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdl
KGJhc2VOb2RlLCBPdGhlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6SW50MzI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRl
eCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEludDMyVXNlKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmln
aW4sIEVkZ2UoYmFzZU5vZGUsIE51bWJlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBTdHJp
bmdVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAg
ICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5z
dHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAg
IE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1
cmUoKSkpLAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2UpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdp
biwgRWRnZShiYXNlTm9kZSwgT2JqZWN0VXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2Rl
LCBPYmplY3RPck90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0goaW5z
ZXJ0aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNo
ZWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVy
cmVkVHlwZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJyZWRU
eXBlQ2hlY2tfaAorI2RlZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkluZmVy
cmVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEluc2Vy
dHMgYSB0eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2ZW4g
aW5mZXJyZWQgdHlwZS4KK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0
aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5mZXJy
ZWRUeXBlQ2hlY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0
IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUg
aW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVl
ZCB0byByZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhp
cyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlw
ZSBpcworICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGlu
ZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMzUsMTQgKzIxMzUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogc3RydWN0dXJlcykgewogICAgICAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGN1cnJlbnRPZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb3VyIGFuYWx5c2lzIHRyZWF0
cyBNdWx0aVB1dEJ5T2Zmc2V0IGxpa2UgYW4gZXNjYXBlLCB3ZSBvbmx5IGhhdmUgdG8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGRlYWwgd2l0aCBzdG9yaW5nIHJlc3VsdHMgdGhhdCB3b3Vs
ZCBoYXZlIGJlZW4gcHJldmlvdXNseSBzdG9yZWQgYnkgUHV0QnlPZmZzZXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFw
cHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5j
b21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVu
dFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLT52
YXJpYW50cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNk
ZWZpbmUgREZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmlu
ZGluZyBhIHByb3BlcnR5J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVu
aXF1ZWRTdHJpbmdJbXBsKi4KKworY2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAg
ICBQcm9wZXJ0eVR5cGVLZXkoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAg
ICAgICwgbV91aWQobnVsbHB0cikKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6
IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAg
IH0KKworICAgIFByb3BlcnR5VHlwZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVk
VUlEKCkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZSAmJiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdWlk
ID09IG90aGVyLm1fdWlkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9w
ZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkg
KyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCk7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fc3RydWN0dXJlICYmIG1fdWlkID09IGRlbGV0ZWRVSUQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRl
eHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKyIsIG1fdWlkKTsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFVuaXF1ZWRT
dHJpbmdJbXBsKiBkZWxldGVkVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBtX3VpZDsKK307CisKK3N0cnVjdCBQcm9wZXJ0eVR5cGVLZXlIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYSwg
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6
UHJvcGVydHlUeXBlS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQ
cm9wZXJ0eVR5cGVLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0
eVR5cGVLZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHUHJvcGVydHlUeXBlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4OTgxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgogICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAg
IGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CkBAIC0xMjcs
NiArMTI4LDkgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAg
IGlmICghc2FmZVRvRXhlY3V0ZUVkZ2UucmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIC8vIE5PVEU6IFRoaXMgdGVuZHMgdG8gbGllIHdoZW4gaXQgY29tZXMgdG8gZWZmZWN0
ZnVsIG5vZGVzLCBiZWNhdXNlIGl0IGtub3dzIHRoYXQgdGhleSBhcmVuJ3QgZ29pbmcgdG8KKyAg
ICAvLyBnZXQgaG9pc3RlZCBhbnl3YXkuCisKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5OCwzNiArMzg5OCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
bm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigK
LSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVsw
XSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVy
ZSh0aGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
dHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWws
IHN0cnVjdHVyZS5ncHIoKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNo
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3Qo
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVD
aGVja1N0cnVjdHVyZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxMSwzOCArMzkxMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
bm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIEV4aXRLaW5k
IGV4aXRLaW5kOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCi0g
ICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9k
ZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1
Y3R1cmUoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJl
U2V0KClbMF0pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKLSAgICAgICAgICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKEpJVENvbXBpbGVyOjpF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBleGl0S2luZCwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tT
dHJ1Y3R1cmUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMzIsNiArNTIzMiw4MSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
Tm9kZSogbm9kZSwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIEFTU0VS
VChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOworICAgIAorICAgIGlmIChub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAw
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxHUFJUZW1wb3Jhcnk+IHN0cnVjdHVyZTsKKyAgICAgICAgR1BSUmVnIHN0
cnVjdHVyZUdQUjsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZW1wR1BSID09IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8R1BSVGVtcG9y
YXJ5Pih0aGlzKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS0+Z3ByKCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gdGVtcEdQUjsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsr
aSkgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoV2Vha1N0cnVjdHVyZShKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+
c3RydWN0dXJlU2V0KClbaV0pKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUo
CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5v
ZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tT
dHJ1Y3R1cmUoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgIGNhc2UgQ2VsbFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZTogeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIGNlbGwuZ3ByKCksIEludmFsaWRHUFJS
ZWcpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjZWxsID0gbV9qaXQuYnJhbmNoSWZD
ZWxsKHZhbHVlUmVncyk7CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgdmFs
dWVSZWdzLCBub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKHZhbHVlUmVncywgdGVtcEdQUikpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBjZWxsLmxpbmso
Jm1faml0KTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHRlbXBHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewpAQCAt
NTYzNiw2ICs1NzExLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRn
ZSAKICAgICAoU3BlY3VsYXRlQ2VsbE9wZXJhbmQodGhpcywgZWRnZSkpLmdwcigpOwogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCit7Cisg
ICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb2sgPSBtX2ppdC5icmFuY2hJZkNlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygpKTsKKyAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihvcGVy
YW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKKyAgICBvay5saW5rKCZtX2ppdCk7Cit9CisK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCiB7CiAgICAg
aWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKQEAgLTU5MTYsNiArNjAwNyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIENl
bGxVc2U6CiAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2Up
OworICAgICAgICBicmVhazsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KGVkZ2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIxNSw2ICsyMjE1LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JO
dWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVUeXBlT2YoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5v
ZGUqLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOworICAgIHZvaWQgY29tcGlsZUNo
ZWNrU3RydWN0dXJlKE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsK
ICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkBAIC0yMzc0LDYgKzIzNzYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UpOwogICAgIHZvaWQgc3Bl
Y3VsYXRlQm9vbGVhbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAg
dm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVj
dChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UpOwogICAgIHZvaWQgc3Bl
Y3VsYXRlRmluYWxPYmplY3QoRWRnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw3ICszMTQsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAg
ICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAv
LyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4gdGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAg
ICAgICAgICAgaW5zZXJ0QmFycmllcldpdGhJbnZhbGlkRXhpdChtX25vZGVJbmRleCArIDEsIEVk
Z2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAg
ICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2No
KEVwb2NoKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAt
NDgxLDExICs0ODEsNiBAQCBwcml2YXRlOgogICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUlu
ZGV4LCBiYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4
aXQodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCi0gICAgewotICAgICAgICBpbnNlcnRC
YXJyaWVyKG5vZGVJbmRleCwgYmFzZSwgZmFsc2UpOwotICAgIH0KLQogICAgIHZvaWQgaW5zZXJ0
QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVl
KQogICAgIHsKICAgICAgICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBv
bmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIAorCiAgICAgLy8gSW4gbW9zdCBjYXNl
cywgd2hhdCB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXMgdmVyaWZ5IHdoZXRoZXIgdGhlIHNldCBp
cyB0b3Agb3IgY2xvYmJlcmVkLCBhbmQKICAgICAvLyBpZiBub3QsIGVudW1lcmF0ZSB0aGUgc2V0
IG9mIHN0cnVjdHVyZXMuIFVzZSB0aGlzIG9ubHkgaW4gY2FzZXMgd2hlcmUgdGhlIHNpbmdsZXRv
biBjYXNlIGlzCiAgICAgLy8gbWVhbmluZ2Z1bGx5IHNwZWNpYWwsIGxpa2UgZm9yIHRyYW5zaXRp
b25zLgpAQCAtMjAyLDYgKzIwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIG1fc2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAg
ICAgICAgbV9zZXQuZm9yRWFjaChmdW5jdG9yKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBLbm93bkNlbGxV
c2U6CiAgICAgICAgIG91dC5wcmludCgiS25vd25DZWxsIik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGxPck90aGVyIik7
CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgb3V0LnByaW50
KCJPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIGVudW0g
VXNlS2luZCB7CiAgICAgS25vd25Cb29sZWFuVXNlLAogICAgIENlbGxVc2UsCiAgICAgS25vd25D
ZWxsVXNlLAorICAgIENlbGxPck90aGVyVXNlLAogICAgIE9iamVjdFVzZSwKICAgICBGdW5jdGlv
blVzZSwKICAgICBGaW5hbE9iamVjdFVzZSwKQEAgLTEwOCw2ICsxMDksOCBAQCBpbmxpbmUgU3Bl
Y3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgY2FzZSBDZWxsVXNlOgogICAgIGNh
c2UgS25vd25DZWxsVXNlOgogICAgICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2FzZSBDZWxs
T3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsIHwgU3BlY090aGVyOwogICAgIGNh
c2UgT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKICAgICBjYXNlIEZ1bmN0
aW9uVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJ
KHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDkgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+dHJh
bnNpdGlvbigpLT5wcmV2aW91cy0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4LDcgQEAg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAg
IGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIENl
bGxPck90aGVyVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDIxICsyMDI2
LDU3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQog
ICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICAKICAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7CiAgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25z
dGFudENhY2hlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hl
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgCi0gICAgICAgIGNoZWNr
U3RydWN0dXJlKAotICAgICAgICAgICAgc3RydWN0dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxsKSwg
ZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBbdGhpc10gKFN0
cnVjdHVyZSogc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1
cmVJRChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
IGNhc2UgS25vd25DZWxsVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoZWNrU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0S2lu
ZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJl
SUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNlbGwgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRpb24iKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUo
bm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgY2hlY2tTdHJ1
Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZSh2YWx1ZSksCisgICAgICAgICAgICAgICAgZXhp
dEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVj
dHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENl
bGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1
ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlz
Tm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNo
ZWNrQ2VsbCgpCkBAIC00MDIyLDYgKzQwNTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxv
Y2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKworICAgICAgICAgICAgY2hlY2tJbmZl
cnJlZFR5cGUobV9ub2RlLT5jaGlsZDIoKSwgdmFsdWUsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKICAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewpAQCAtNTY3
NCw2ICs1NzEyLDEzNSBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwg
cmVzdWx0cyk7CiAgICAgfQorCisgICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2Us
IExWYWx1ZSB2YWx1ZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorICAg
IHsKKyAgICAgICAgLy8gVGhpcyBjYW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVj
aygpIGJlY2F1c2UgaXQgaXMgY2FsbGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Cisg
ICAgICAgIC8vCisgICAgICAgIC8vICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gbWF5IGJlIGxvd2VyZWQgdG86CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKSB7CisgICAgICAgIC8vICAgICBjYXNlIDQy
OgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOworICAg
ICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyAgICAgY2FzZSA0MzoKKyAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4s
IHR5cGUyKTsKKyAgICAgICAgLy8gICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVh
azsKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gd2hlcmUgdHlwZTEg
YW5kIHR5cGUyIGFyZSBkaWZmZXJlbnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhh
dCB0aGUgZWRnZSB3b3VsZCBiZQorICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUy
LCBpbnN0ZWFkIG9mIHR5cGUxIHwgdHlwZTIuCisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHR5
cGUua2luZCgpKSB7CisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok90aGVyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkludDMyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3ROdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJp
bmcodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNO
b3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBpZiAoIWFic3Ry
YWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5z
dHJ1Y3R1cmUoKSkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVk
VHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJj
aGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjb250aW51YXRpb24i
KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90
Q2VsbENhc2UpOworCisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlYWtT
dHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUo
CisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2Rl
KCksCisgICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IH5TcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdDoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVj
a0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNr
SW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNl
bGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgIGlzTm90T2JqZWN0KHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAg
ICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsK
KworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvYWRQ
cm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKQEAgLTc1MTQsNiArNzY4MSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVy
Lm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzU5NCw2ICs3
NzY0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGxvd0NlbGwoZWRnZSk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90Q2VsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiU3BlY3VsYXRlIENlbGxPck90aGVyIG5vdCBjZWxsIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JP
dGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1
ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaXNOb3RD
ZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhp
c05vdENlbGwsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVl
KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBz
cGVjdWxhdGVNYWNoaW5lSW50KEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghbV9pbnRl
cnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKQEAgLTgxMjcsNiArODMxMyw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlv
biA9PSBtX291dC5ib29sZWFuRmFsc2UpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
QVNTRVJUKG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5m
aW5hbGl6ZXItPm9zckV4aXQuc2l6ZSgpKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKQEAgLTgxMzUsOSArODMyNCwxNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZB
cmd1bWVudHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJl
ck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgICAgIAorCiAgICAgICAgIE9TUkV4
aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwogCisgICAgICAg
IGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5UcnVlKSB7CisgICAgICAgICAgICBl
bWl0T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRyOwogICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBudWxscHRyOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNzggQEAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4mIEFzc2VtYgogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
fQogCitBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZO
b3RUeXBlKAorICAgIEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSkK
K3sKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IHJlc3VsdDsKKworICAgIHN3aXRjaCAo
ZGVzY3JpcHRvci5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAg
ICAgICByZXN1bHQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RC
b29sZWFuKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPdGhlcihy
ZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkludDMyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVncywgbW9k
ZSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIocmVncywgdGVtcEdQUiwgbW9k
ZSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdzLnBheWxvYWRHUFIoKSkpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0
dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisg
ICAgICAgICAgICAgICAgTm90RXF1YWwsCisgICAgICAgICAgICAgICAgQWRkcmVzcyhyZWdzLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAgIEp1bXAg
b2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisg
ICAgICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgTm90RXF1YWwsCisg
ICAgICAgICAgICAgICAgQWRkcmVzcyhyZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7
CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHJlZ3MsIG1vZGUpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdChyZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90
aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChyZWdzLCBtb2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3Qo
cmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnB1cmlmeU5hTihGUFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5h
TiA9IGJyYW5jaERvdWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk4MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NTUsMzcgKzU1NSw0OCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBK
dW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQorICAgIGVudW0gVGFnUmVnaXN0ZXJzTW9k
ZSB7CisgICAgICAgIERvTm90SGF2ZVRhZ1JlZ2lzdGVycywKKyAgICAgICAgSGF2ZVRhZ1JlZ2lz
dGVycworICAgIH07CisKKyAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnLCBUYWdS
ZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2RlID09
IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWcsIFRydXN0ZWRJbW02NChUYWdNYXNrKSk7CiAjZWxzZQorICAg
ICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
ICNlbmRpZgogICAgIH0KLSAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyByZWdz
KQorICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVy
c01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwocmVncy5ncHIoKSk7CisgICAgICAgIHJl
dHVybiBicmFuY2hJZk5vdENlbGwocmVncy5ncHIoKSwgbW9kZSk7CiAjZWxzZQotICAgICAgICBy
ZXR1cm4gYnJhbmNoSWZOb3RDZWxsKHJlZ3MudGFnR1BSKCkpOworICAgICAgICByZXR1cm4gYnJh
bmNoSWZOb3RDZWxsKHJlZ3MudGFnR1BSKCksIG1vZGUpOwogI2VuZGlmCiAgICAgfQogICAgIAot
ICAgIEp1bXAgYnJhbmNoSWZDZWxsKEdQUlJlZyByZWcpCisgICAgSnVtcCBicmFuY2hJZkNlbGwo
R1BSUmVnIHJlZywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAg
ICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAg
ICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q2NChaZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVnLCBUcnVzdGVkSW1tNjQoVGFnTWFzaykpOwogI2Vs
c2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSk7CiAjZW5kaWYKICAgICB9Ci0gICAgSnVtcCBicmFuY2hJZkNlbGwoSlNWYWx1ZVJlZ3MgcmVn
cykKKyAgICBKdW1wIGJyYW5jaElmQ2VsbChKU1ZhbHVlUmVncyByZWdzLCBUYWdSZWdpc3RlcnNN
b2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICByZXR1cm4gYnJhbmNoSWZDZWxsKHJlZ3MuZ3ByKCkpOworICAgICAgICByZXR1cm4g
YnJhbmNoSWZDZWxsKHJlZ3MuZ3ByKCksIG1vZGUpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGJy
YW5jaElmQ2VsbChyZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaElmQ2VsbChy
ZWdzLnRhZ0dQUigpLCBtb2RlKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTYxMyw0MyArNjI0
LDU1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaElmSW50
MzIoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICBKdW1wIGJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3Mg
cmVncywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwg
cmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgaWYg
KG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW02NChUYWdUeXBlTnVtYmVyKSk7CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9k
ZSk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgSnVt
cCBicmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgSnVtcCBicmFuY2hJZk5v
dEludDMyKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdS
ZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBicmFu
Y2g2NChCZWxvdywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICAgICAgaWYgKG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2g2NChCZWxvdywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEJlbG93LCByZWdzLmdwcigpLCBUcnVzdGVk
SW1tNjQoVGFnVHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUp
OwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogI2VuZGlmCiAgICAgfQogCiAgICAgLy8gTm90
ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDY0LWJpdCBtb2RlLgotICAgIEp1bXAg
YnJhbmNoSWZOdW1iZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCisgICAgSnVt
cCBicmFuY2hJZk51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgVGFnUmVn
aXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgVU5VU0VEX1BBUkFNKHRlbXBHUFIpOwotICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDY0KE5vblplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpKTsKICNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdz
LnRhZ0dQUigpLCB0ZW1wR1BSKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93LCB0ZW1w
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwogI2VuZGlmCiAgICAg
fQogICAgIAogICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1i
aXQgbW9kZS4KLSAgICBKdW1wIGJyYW5jaElmTm90TnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQ
UlJlZyB0ZW1wR1BSKQorICAgIEp1bXAgYnJhbmNoSWZOb3ROdW1iZXIoSlNWYWx1ZVJlZ3MgcmVn
cywgR1BSUmVnIHRlbXBHUFIsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3Rl
cnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1w
R1BSKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWdzLmdwcigpLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBpZiAobW9kZSA9PSBIYXZlVGFn
UmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWdzLmdw
cigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3ByKCksIFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSk7
CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSwgdGVtcEdQUik7CiAgICAgICAgIHJldHVybiBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcgKyAxKSk7CiAjZW5kaWYKQEAgLTcxOSw2ICs3NDIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAg
ICB9CiAKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5cGUoCisgICAgICAgIEpTVmFsdWVSZWdz
LCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgVGFnUmVn
aXN0ZXJzTW9kZSk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEp1bXAgYnJhbmNo
U3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzcsNyArMzc3LDggQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgcHRyZGlmZl90
IG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UgPSBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBl
ID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6
aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRUb1BhdGNoZWRTdG9yYWdlKQotICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
eworICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZUZvcihp
ZGVudC5pbXBsKCkpKSB7CiAKICAgICAgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
CiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMzLDYg
KzYzMyw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAg
ICAgcGNbNV0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gb2Zmc2V0CiAgICAgICAgIHBjWzZdLnUu
cG9pbnRlciA9IG51bGxwdHI7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICAgICAgcGNbN10udS5wb2lu
dGVyID0gbnVsbHB0cjsgLy8gc3RydWN0dXJlIGNoYWluCisgICAgICAgIHBjWzhdLnUucHV0QnlJ
ZEZsYWdzID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4ocGNbOF0udS5w
dXRCeUlkRmxhZ3MgJiBQdXRCeUlkUGVyc2lzdGVudEZsYWdzTWFzayk7CiAgICAgICAgIAogICAg
ICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTY2MCwxMiArNjYy
LDE4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNldCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9y
KGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgcGNbNF0udS5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+
aWQoKTsKICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOworICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGljX2Nhc3Q8
UHV0QnlJZEZsYWdzPigKKyAgICAgICAgICAgICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3Mg
fAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JG
b3IoaWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEyNjUsMTQgKzEyNjUsODggQEAgX2xsaW50X29wX3B1dF9ieV9pZDoKICAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQz
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHQzLCB0MCwgLm9wUHV0QnlJZFNsb3cp
Ci0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDIKLSAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmluZXEgdDIsIHQxLCAub3BQdXRCeUlkU2xvdworICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MikKKyAgICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0
cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2Ug
aGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJyZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDIgLT4g
Y3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+IG9iamVjdCBiYXNlCiAKKyAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwg
dDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig4LCB0MSkKKworICAgICMgQXQgdGhpcyBw
b2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVjdCBiYXNlCisgICAgIyB0MSAtPiBwdXQg
YnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0MyAt
PiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAu
b3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIKKworICAgICMgV2Ug
aGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlwZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNo
IG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaywgdDEKKyAgICBicGx0IHQx
LCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFu
U3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogU3RyaW5nLCBPYmpl
Y3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAgIGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBl
T2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcgor
CisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3RoZXIgb3IgVG9wLgorICAgIGJwZXEgdDEs
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKwor
ICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3RoZXIuCisgICAgYnRxeiB0MywgdGFnTWFz
aywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorLm9wUHV0QnlJZFR5cGVDaGVja090aGVyOgor
ICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDMKKyAgICBicWVxIHQzLCBWYWx1ZU51bGwsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQ
dXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyOgorICAgICMgV2UgYXJlIGVpdGhl
ciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkU2xv
dworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nLCAub3BQdXRCeUlkVHlw
ZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworLm9wUHV0
QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBiYmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9iamVj
dFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xv
dworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmc6CisgICAgIyBXZSBhcmUgb25l
IG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIsIEludDMyLCBOdW1iZXIK
KyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBXZSBhcmUgZWl0aGVyIEludDMyIG9yIE51bWJlci4K
KyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciwgLm9wUHV0QnlJZFR5cGVD
aGVja051bWJlcgorCisgICAgYnFhZXEgdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25l
Q2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNo
ZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNo
ZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVj
a0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRv
bSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBuZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9v
bGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXIKKyAgICB4b3JxIFZhbHVlRmFs
c2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAg
IGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoK
KyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlCisgICAgYnRwbnogdDEsIFB1dEJ5SWRQcmlt
YXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3Ro
ZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgdXJzaGlmdHAgMywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjpt
X3N0cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2lu
Z1R5cGVzOgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBidGl6
IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTg5ODEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBMb3dl
c3RUYWcgPSBEZWxldGVkVmFsdWVUYWcKIGVuZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cg
bXVzdCBiZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0IFB1
dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29u
ZGFyeSA9IDB4MAorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9
IDB4MgorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIg
PSAweDQKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1dEJ5
SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJv
b2xlYW4gPSAweDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitjb25z
dCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29uZGFy
eVR5cGVOdW1iZXIgPSAweDIwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4
MjgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29uZGFy
eVR5cGVUb3AgPSAweDQwCisKIGNvbnN0IENhbGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQg
b3IgQVJNNjQgb3IgQ19MT09QCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmZlcnJlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIElu
ZmVycmVkVHlwZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7CitwdWJsaWM6CisgICAg
SW5mZXJyZWRUeXBlRmlyZURldGFpbCgKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5
cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCisgICAgICAgIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvciwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBuZXdEZXNjcmlwdG9yLAorICAgICAgICBKU1ZhbHVlIG9mZmVuZGluZ1ZhbHVlKQorICAgICAg
ICA6IG1faW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisg
ICAgICAgICwgbV9vbGREZXNjcmlwdG9yKG9sZERlc2NyaXB0b3IpCisgICAgICAgICwgbV9uZXdE
ZXNjcmlwdG9yKG5ld0Rlc2NyaXB0b3IpCisgICAgICAgICwgbV9vZmZlbmRpbmdWYWx1ZShvZmZl
bmRpbmdWYWx1ZSkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBvdXQucHJpbnQo
CisgICAgICAgICAgICAiSW5mZXJyZWQgdHlwZSBjaGFuZ2VkIG9uICIsIFJhd1BvaW50ZXIobV9p
bmZlcnJlZFR5cGUpLCAiIGZvciBwcm9wZXJ0eSAiLCBtX3VpZCwgIjogIgorICAgICAgICAgICAg
Im9sZCB0eXBlIHdhcyAiLCBtX29sZERlc2NyaXB0b3IsICIgd2hpbGUgZGVzaXJlZCB0eXBlIGlz
ICIsIG1fbmV3RGVzY3JpcHRvcik7CisgICAgICAgIGlmIChtX29mZmVuZGluZ1ZhbHVlKQorICAg
ICAgICAgICAgb3V0LnByaW50KCIgZHVlIHRvICIsIG1fb2ZmZW5kaW5nVmFsdWUpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUqIG1faW5mZXJyZWRUeXBlOworICAgIFJlZlB0
cjxVbmlxdWVkU3RyaW5nSW1wbD4gbV91aWQ7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
IG1fb2xkRGVzY3JpcHRvcjsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9uZXdEZXNj
cmlwdG9yOworICAgIEpTVmFsdWUgbV9vZmZlbmRpbmdWYWx1ZTsKK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2luZm8gPSB7
ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZSkg
fTsKKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAg
SW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJl
ZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9
IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZS0+SW5m
ZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJy
ZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworCisgICAgaWYgKGluZmVycmVk
VHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFs
aXplcigmaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZS0+bV9maW5hbGl6ZXIpOworfQorCitJbmZl
cnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZs
YWdzKQoreworICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7Cisg
ICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6CisgICAgICAgIHN3aXRjaCAoZmxh
Z3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vj
b25kYXJ5VHlwZUJvdHRvbToKKyAgICAgICAgICAgIHJldHVybiBCb3R0b207CisgICAgICAgIGNh
c2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xl
YW47CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjoKKyAgICAgICAgICAg
IHJldHVybiBPdGhlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyOgor
ICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICAgICAgY2FzZSBQdXRC
eUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAg
ICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4g
T2JqZWN0OworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcjoK
KyAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlVG9wOgorICAgICAgICAgICAgcmV0dXJuIFRvcDsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gQm90dG9tOworICAgICAgICB9CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZTsK
KyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEJv
dHRvbTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlz
Qm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIE90aGVyOworICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkK
KyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAg
ICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5pc1N0
cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgaWYgKGNlbGwtPmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVz
Y3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUb3A7Cit9
CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZv
ckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIEtpbmQga2luZCA9IGtp
bmRGb3JGbGFncyhmbGFncyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgaWYgKGhh
c1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSk7CisgICAgZWxzZQorICAgICAg
ICBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIHJldHVybiBEZXNjcmlwdG9yKGtpbmQsIHN0cnVj
dHVyZSk7Cit9CisKK1B1dEJ5SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnB1dEJ5
SWRGbGFncygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRv
bToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1h
cnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20pOworICAgIGNhc2Ug
Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJ
ZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuKTsKKyAg
ICBjYXNlIE90aGVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQ
dXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyKTsK
KyAgICBjYXNlIEludDMyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdz
PihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMy
KTsKKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVO
dW1iZXIpOworICAgIGNhc2UgU3RyaW5nOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0
QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZVN0cmluZyk7CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNv
bmRhcnlUeXBlT2JqZWN0KTsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcik7CisgICAgY2FzZSBUb3A6CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNl
Y29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wKTsKKyAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAg
ICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSB8IGVuY29kZVN0
cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKSk7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisg
ICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciB8
IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKSk7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFB1dEJ5SWROb25lOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3Ro
ZXIpCit7CisgICAgLy8gRmlsdGVyIG91dCBjb21tb24gdGhpbmdzIHRvIHNpbXBsaWZ5IHRoZSBz
d2l0Y2ggc3RhdGVtZW50IGJlbG93LgorICAgIGlmICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChvdGhlci5tX2tpbmQgPT0gQm90dG9tKQorICAgICAgICByZXR1cm47
CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAgICAgICAqdGhp
cyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuOgorICAgIGNhc2Ug
U3RyaW5nOgorICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
T3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
cjoKKyAgICAgICAgICAgICp0aGlzID0gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciwgb3RoZXIuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRo
aXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICBjYXNlIEludDMyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgICp0aGlzID0gTnVtYmVyOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAg
c3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdp
dGhTdHJ1Y3R1cmU6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRo
ZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAg
ICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRoaXMg
PSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVj
dE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Ug
a25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KKyAgICAgICAgY2FzZSBPYmpl
Y3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAq
dGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAg
Y2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
Y2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVtb3Zl
U3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgT2JqZWN0V2l0
aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAqdGhpcyA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47
CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMoY29u
c3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRvciBtZXJnZWQgPSAq
dGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAqdGhpcyA9PSBtZXJn
ZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6
IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1
bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5
cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJlLmdldCgp
KQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJy
ZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldh
dGNoKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYg
ZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3ApCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpID09IGV4cGVj
dGVkOworfQorCitib29sIEluZmVycmVkVHlwZTo6Y2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYg
ZXhwZWN0ZWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICByZXR1cm4gY2FuV2F0Y2gobG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChkZXNjcmlwdG9yKGxv
Y2tlcikua2luZCgpICE9IFRvcCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9p
bnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3
YXRjaHBvaW50KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChSYXdQ
b2ludGVyKHRoaXMpLCAiOiIsIGRlc2NyaXB0b3IoKSk7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBl
Ojp3aWxsU3RvcmVWYWx1ZVNsb3coVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgRGVzY3JpcHRvciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3Jp
cHRvciBvdGhlclR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5
cGUubWVyZ2Uob3RoZXJUeXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0g
bXlUeXBlKTsgLy8gVGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNs
b3cgcGF0aC4KKworICAgIHNldChsb2NrZXIsIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBteVR5
cGUpOworCisgICAgcmV0dXJuIGtpbmQobG9ja2VyKSAhPSBUb3A7Cit9CisKK3ZvaWQgSW5mZXJy
ZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7
CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2Vy
LCB2bSwgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKCksIFRvcCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRU
eXBlOjpzZXQoCisgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgb2ZmZW5kaW5nVmFsdWUsCisgICAg
RGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQoreworICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0
ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJp
ZXJzIGRvbid0IEdDLCBidXQgdGhhdAorICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywg
d2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAor
ICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRoZSBj
YWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQorICAgIC8v
IGEgZ29vZCBpZGVhLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAg
ICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhl
IHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3Jp
cHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91
cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2Nr
ZXIpKSk7CisKKyAgICAvLyBJZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0
cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBp
ZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0
dXJlKCkpCisgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8
ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0
aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywgdGhleSBm
aW5kIG91dCBhYm91dCBpdCBub3cuIElmCisgICAgLy8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBt
YWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRo
aW5nIGFnYWluLgorICAgIGlmIChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNo
cG9pbnQpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2lu
Y2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NF
UlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAg
SW5mZXJyZWRUeXBlRmlyZURldGFpbCBkZXRhaWwoCisgICAgICAgICAgICB0aGlzLCBwcm9wZXJ0
eU5hbWUudWlkKCksIGRlc2NyaXB0b3IobG9ja2VyKSwgbmV3RGVzY3JpcHRvciwgb2ZmZW5kaW5n
VmFsdWUpOworICAgICAgICAKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZl
IHRoaW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhp
cyB0eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0
IHRoaXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5n
cyBmb3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAg
ICAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoZGV0YWlsKTsKKyAgICB9CisKKyAgICAvLyBS
ZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5l
ZWQgaXQuCisgICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBtX3N0
cnVjdHVyZSA9IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUg
b2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1Y3R1
cmUoKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAgICAgICAg
IEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1
cmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6
bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCktPmFkZFRy
YW5zaXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZS0+bV93YXRjaHBvaW50KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRvciBraW5kLgorICAg
IG1fa2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAgLy8gQXNzZXJ0IHRoYXQgd2Ug
ZGlkIHRoaW5ncy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0
b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICAv
LyBGSVhNRTogRmluZCBhbiBlbGVnYW50IGFuZCBjaGVhcCB3YXkgdG8gdGhyZWFkIGluZm9ybWF0
aW9uIGFib3V0IHdoeSB3ZSBnb3QgaGVyZSBpbnRvIHRoZSBmaXJlCisgICAgLy8gZGV0YWlsIGlu
IHNldCgpLgorICAgIAorICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKHRoaXMpLT52bSgpOworCisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlw
dG9yIG5ld0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRv
ci5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgUHJvcGVydHlO
YW1lKG51bGxwdHIpLCBKU1ZhbHVlKCksIG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVy
cmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3Qg
RmlyZURldGFpbCYpCit7CisgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJl
ID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCisgICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3Ry
dWN0dXJlLCBtX3dhdGNocG9pbnQpKTsKKworICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVu
dC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0
cnVjdHVyZUZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIEluZmVy
cmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxJ
bmZlcnJlZFN0cnVjdHVyZSo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgbV9maW5hbGl6ZXIpKTsKKwor
ICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQpKTsK
KyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGluZmVycmVkU3RydWN0dXJlLT5tX3N0cnVj
dHVyZS5nZXQoKSkpCisgICAgICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3Zl
U3RydWN0dXJlKCk7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVy
cmVkU3RydWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBh
cmVudCwgc3RydWN0dXJlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBJbmZlcnJlZFR5cGU6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBvdXQucHJpbnQo
IkJvdHRvbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xl
YW46CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk90aGVyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIG91
dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpOdW1iZXI6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBvdXQucHJpbnQoIlN0cmlu
ZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAg
ICBvdXQucHJpbnQoIk9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAg
b3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgSW5mZXJy
ZWRUeXBlX2gKKworI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiUHV0QnlJZEZsYWdz
LmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhp
cyBpcyBhbiBvYmplY3QgdXNlZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2Jq
ZWN0IHByb3BlcnRpZXMuCisKK2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5m
ZXJyZWRUeXBlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9y
dGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAg
ICAgQm90dG9tLAorICAgICAgICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50
MzIsCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRo
U3RydWN0dXJlLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAg
T2JqZWN0LAorICAgICAgICBPYmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisg
ICAgc3RhdGljIEtpbmQga2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyk7CisgICAgCisgICAgc3Rh
dGljIGJvb2wgaGFzU3RydWN0dXJlKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
a2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2Ug
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGNsYXNzIERlc2NyaXB0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVzY3Jp
cHRvcigpCisgICAgICAgICAgICA6IG1fa2luZChCb3R0b20pCisgICAgICAgICAgICAsIG1fc3Ry
dWN0dXJlKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlc2NyaXB0
b3IoS2luZCBraW5kLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIpCisgICAgICAgICAg
ICA6IG1fa2luZChraW5kKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgRGVz
Y3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBm
b3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgIT0gQm90
dG9tIHx8IG1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJ
ZEZsYWdzKCkgY29uc3Q7CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFs
dWUoSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICAgICAgICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUuaXNCb29sZWFuKCk7CisgICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQz
MjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAg
Y2FzZSBOdW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7Cisg
ICAgICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNT
dHJpbmcoKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpID09IG1fc3RydWN0dXJlOworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KQorICAgICAgICAgICAgICAgICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0
OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpIHx8IHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIFRvcDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICAg
ICAmJiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBt
ZXJnZShjb25zdCBEZXNjcmlwdG9yJik7CisgICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7
CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdl
bmVyYWwgdGhhbiB0aGUgb3RoZXIgb25lLgorICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERl
c2NyaXB0b3ImKSBjb25zdDsKKworICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5kOworICAgICAgICBT
dHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBDb25jdXJyZW50SklUTG9jayYg
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3JpcHRvciBkZXNjcmlw
dG9yTWFpblRocmVhZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvciht
X2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7
CisgICAgfQorICAgIAorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yTWFpblRo
cmVhZCgpOworICAgIH0KKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0
dXJuIGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcihs
b2NrZXIpLmtpbmQoKTsgfQorCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZCA9PSBUb3A7IH0KKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQg
IT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBpcyBz
dGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0J3Mg
VG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBEZXNj
cmlwdG9yIGN1cnJlbnREZXNjcmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICAg
ICAgaWYgKGN1cnJlbnREZXNjcmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnREZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAgIHJldHVy
biB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIH0KKwor
ICAgIC8vIEltbWVkaWF0ZWx5IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50LgorICAgIHZvaWQg
bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWFrZVRvcFNsb3co
dm0sIHByb3BlcnR5TmFtZSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1
cnJlbnRseSBtYWtlcyBzZW5zZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBk
ZXNjcmlwdG9yLiBOb3RlIHRoYXQKKyAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxz
ZSBmb3IgVG9wLgorICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYg
bG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJik7CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNj
cmlwdG9yJik7CisgICAgCisgICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChX
YXRjaHBvaW50Kik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBJbmZlcnJlZFR5cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAg
ICBib29sIHdpbGxTdG9yZVZhbHVlU2xvdyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7Cisg
ICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgdm9pZCBzZXQoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBEZXNj
cmlwdG9yKTsKKyAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25j
dXJyZW50SklUTG9jayBtX2xvY2s7CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsK
KworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBv
aW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCgp
IHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmly
ZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVy
ZUZpbmFsaXplciA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyKCkgeyB9CisgICAgcHJvdGVjdGVk
OgorICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAg
fTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlIHsKKyAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZShWTSYs
IEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVkVHlwZTsKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyOworICAgICAgICAKKyAgICAgICAgSW5mZXJy
ZWRUeXBlKiBtX3BhcmVudDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1
Y3R1cmU7CisKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2lu
dDsKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgbV9maW5hbGl6ZXI7CisgICAg
fTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7
CisKKyAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0
byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQorICAgIC8vIHBy
b2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVk
IGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8gdGhyZWFkLiBU
aGUgREZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0
Y2hlcy4KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkluZmVycmVkVHlwZVRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9
IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJl
ZFR5cGVUYWJsZSkgfTsKKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpj
cmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVk
VHlwZVRhYmxlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0
aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZVRhYmxl
LT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisKK1N0cnVjdHVy
ZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFi
bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJy
ZWRUeXBlVGFibGUqPihjZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGlu
ZmVycmVkVHlwZVRhYmxlLT5tX2xvY2spOworICAgIAorICAgIGZvciAoYXV0byYgZW50cnkgOiBp
bmZlcnJlZFR5cGVUYWJsZS0+bV90YWJsZSkgeworICAgICAgICBpZiAoIWVudHJ5LnZhbHVlKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXNSZWxldmFu
dCgpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJ5LnZhbHVlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW50cnkudmFsdWUuY2xlYXIoKTsKKyAgICB9Cit9CisKK0luZmVy
cmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZp
bmQodWlkKTsKKyAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkg
dG8gcHJ1bmUgaW52YWxpZGF0ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNSZWxl
dmFudCgpKSB7CisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKK30KKworSW5m
ZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4g
Z2V0KGxvY2tlciwgdWlkKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6
Z2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIGdldChwcm9wZXJ0
eU5hbWUudWlkKCkpOworfQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1
ZSgKKyAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVs
aWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1h
cC4KKyAgICAKKyAgICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFRhYmxlVHlw
ZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAg
ICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKyAgICAgICAg
CisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBp
dGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
VGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJv
cGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9Cisg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEluZmVycmVkVHlwZSogaW5mZXJy
ZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhpcywg
aW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sK
KyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBv
bmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICBpZiAoYWdlID09IE9sZFByb3Bl
cnR5KSB7CisgICAgICAgIFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChw
cm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8
ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsgLy8gQWJzZW5jZSBvbiByZXBsYWNl
ID0+IHRvcC4KKworICAgICAgICBpdGVyLT52YWx1ZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFRhYmxlVHlwZTo6QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7CisgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJlc3VsdCA9IG1fdGFibGUu
YWRkKHByb3BlcnR5TmFtZS51aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7Cisg
ICAgfQorICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFt
ZSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworfQorCitJbmZlcnJlZFR5
cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFibGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5m
ZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCit7Cit9CisKK0luZmVycmVkVHlwZVRhYmxl
Ojp+SW5mZXJyZWRUeXBlVGFibGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJs
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlw
ZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29t
ZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhl
IFN0cnVjdHVyZQorLy8gZGVzdHJ1Y3RvciBhbmQgbWFrZXMgbGlmZXR5cGUgZWFzaWVyIHRvIG1h
bmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0
aGluZworLy8gY2Fubm90IGJlIGRlbGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlz
IGlzIHNlcGFyYXRlIGZyb20gUHJvcGVydHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcwor
Ly8gd2lsbCBub3QgaGF2ZSBhbiBJbmZlcnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBh
cmUgaW4gZGljdGlvbmFyaWVzIChpZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisvLyBhcyBi
ZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21lIFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFw
cGlseSBjb25mbGF0ZSB0aGUgdHlwZXMgb2YgcHJvcGVydGllcyBmcm9tCisvLyBkaWZmZXJlbnQg
c3RydWN0dXJlcyBldmVuIGlmIHRoZSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRz
IG9mIG9iamVjdHMuCisKK2NsYXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJ
bmZlcnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJl
SXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxv
Y2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJy
ZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBib3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1l
YW5zIEJvdHRvbSBpZiB0aGUKKyAgICAvLyBvd25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBh
Ym91dCB0aGUgcHJvcGVydHkuCisgICAgSW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQo
VW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUp
OworCisgICAgZW51bSBTdG9yZWRQcm9wZXJ0eUFnZSB7CisgICAgICAgIE5ld1Byb3BlcnR5LAor
ICAgICAgICBPbGRQcm9wZXJ0eQorICAgIH07CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0
ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8vIHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3Rl
IHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAg
Ym9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgU3RvcmVkUHJv
cGVydHlBZ2UpOworCisgICAgLy8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0
eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0Lgor
ICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UpOwor
Citwcml2YXRlOgorICAgIEluZmVycmVkVHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVycmVkVHlw
ZVRhYmxlKCk7CisKKyAgICAvLyBCb3R0b206IGFic2VuY2UgZnJvbSB0YWJsZS4KKyAgICAvLyBU
b3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1ZS0+aXNSZWxldmFudCgpLCBvciBhYnNlbmNl
IGZyb20gdGFibGUuCisgICAgLy8KKyAgICAvLyBXZSBrbm93IGhvdyB0byBkZXRlcm1pbmUgaWYg
YWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0b20gb3IgdG9wIGRlcGVuZGluZyBvbiB3aGV0
aGVyIHRoZQorICAgIC8vIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIG93bmluZyBzdHJ1Y3R1
cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSwgYWJzZW5jZSBtYXkgaGF2ZQor
ICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRoaXMgY2xhc3MgZGV0ZXJt
aW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkKKyAgICAv
LyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhY3Rpb25zOiByZXBsYWNlIG9yIHRy
YW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5ldyBwcm9wZXJ0eQorICAgIC8vICh0cmFuc2l0
aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRvbS4gSWYgd2UncmUgc3RvcmluZyB0byBhbiBl
eGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSwgdGhlbgorICAgIC8vIGFic2VuY2UgbWVhbnMgdG9w
LiBUbyBtYWtlIHRoaXMgd29yaywgd2UgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHRoZSBjYXNlIHdo
ZXJlIHR3byBzdHJ1Y3R1cmVzLCBTMSBhbmQKKyAgICAvLyBTMiwgc2hhcmUgdGhlIHNhbWUgSW5m
ZXJyZWRUeXBlVGFibGUgYW5kIG5laXRoZXIgb2YgdGhlbSBpbml0aWFsbHkga25vdyBhYm91dCBw
cm9wZXJ0eSBQLiBTMSBtYXkKKyAgICAvLyB3YW50IHRvIGFkZCBQIHdpdGhvdXQgYSB0eXBlLCB3
aGlsZSBTMiBtYXkgd2FudCB0byBhZGQgUCB3aXRoIGEgdHlwZS4gSWYgUzEgYWRkZWQgUCBhbmQg
dXNlZCBhYnNlbmNlCisgICAgLy8gdG8gaW5kaWNhdGUgVG9wLCB0aGVuIFMyIHdvdWxkIHVzZSB0
aGF0IGFic2VuY2UgdG8gbWVhbiBCb3R0b20gYW5kIHdvdWxkIGVuZCB1cCBjcmVhdGluZyBhIG5v
bi1Ub3AKKyAgICAvLyBlbnRyeSBpbiB0aGUgdGFibGUuIFRoZW4gUzEgd291bGQgZm9yZ2V0IHRo
YXQgaXQgd2FudGVkIFRvcCwgYW5kIHdvdWxkIHVzZSBTMidzIHR5cGUuIENsZWFybHksCisgICAg
Ly8gdGhhdCdzIGJhZC4gV2UgYXZvaWQgc3VjaCBjb25mdXNpb24gYnkgZW5zdXJpbmcgdGhhdCBh
IHRyYW5zaXRpb24gYWx3YXlzIGFkZHMgYW4gZW50cnkuIEhlbmNlLAorICAgIC8vIGFic2VuY2Ut
bWVhbnMtYm90dG9tIG9ubHkgY29tZXMgaW50byBwbGF5IGZvciBwcm9wZXJ0aWVzIGFkZGVkIGJl
Zm9yZSB0aGUgSW5mZXJyZWRUeXBlVGFibGUgd2FzCisgICAgLy8gY3JlYXRlZC4KKyAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgV3JpdGVCYXJyaWVyPEluZmVy
cmVkVHlwZT4sIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFVuaXF1ZWRTdHJpbmdJbXBs
Kj4+IFRhYmxlVHlwZTsKKyAgICAKKyAgICBUYWJsZVR5cGUgbV90YWJsZTsKKworICAgIC8vIFdl
IG9ubHkgZ3JhYiB0aGlzIGxvY2sgd2hlbiB3ZSdyZSBkb2luZyBtb2RpZmljYXRpb25zIG9uIHRo
ZSBtYWluIHRocmVhZCwgb3IgcmVhZHMgb24gdGhlIGNvbXBpbGVyCisgICAgLy8gdGhyZWFkLiBU
aGUgY29tcGlsZXIgdGhyZWFkIGlzIG5vdCBhbGxvd2VkIHRvIGRvIG1vZGlmaWNhdGlvbnMuCisg
ICAgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYg
KzExODksOCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhh
c0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0
cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTEyMjcsMjkgKzEyMjksNDAgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJl
KCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgeworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlKAorICAgICAgICBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
b2Zmc2V0KTsKKyAgICBpZiAobmV3U3RydWN0dXJlKSB7CisgICAgICAgIG5ld1N0cnVjdHVyZS0+
d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Cisg
ICAgICAgIAogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG5ld0J1
dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkg
IT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NF
UlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0J1
dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2YWxp
ZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0
LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0
ZXM7Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVu
dEF0dHJpYnV0ZXMpOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZl
cnJlZFR5cGUpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICBp
ZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxh
Y2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBl
KSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisg
ICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIH0KKwogICAgICAgICBzbG90LnNl
dEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKIApAQCAtMTI2OCwxNiArMTI4MSwxOSBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgLy8gd2Ugd2FudC4KICAgICBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOwog
ICAgIAotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRl
eHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOworICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdh
dGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNp
dGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAg
IHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVy
ZSk7CisgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAg
ICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBuZXdTdHJ1
Y3R1cmUpOwogCiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICBzbG90LnNl
dE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkKLSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwor
ICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzMzUsOCArMTM1MSwxMSBAQCBpbmxpbmUgdm9pZCBK
U09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0
T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3Rv
cmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKTsKKyAgICBib29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7CisgICAgc3RydWN0dXJl
LT53aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNo
b3VsZE9wdGltaXplKTsKKyAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVy
ZSwgbmV3QnV0dGVyZmx5KTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDE4OTgxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MCwxMSArMzUwLDE1IEBAIHZvaWQgU3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBlbHNlCiAgICAgICAgIHByb3BlcnR5VGFi
bGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKIAorICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBl
VGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworCiAgICAgZm9yIChzaXplX3QgaSA9
IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVy
ZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJl
LT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUt
PmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOworICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVU
YWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCisgICAgICAgICAg
ICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOwogICAgICAgICBwcm9wZXJ0eVRhYmxlKCkt
PmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5v
dENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtNDY0LDYgKzQ2OCw3IEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVz
SW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OworICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0TWF5QmVOdWxsKHZt
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpOwogCiAg
ICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwogCkBAIC00NzksNiArNDg0LDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXQKIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogeworICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBzb21l
IGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRpcmVjdGx5IHRvIHVuY2FjaGVhYmxlIGRpY3Rp
b25hcnkgcmF0aGVyIHRoYW4KKyAgICAvLyBjYWNoaW5nIHRoZSByZW1vdmFsLiBXZSBjYW4gZml4
IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBtdXN0IHJlbWVtYmVyIHRvIGRvIHNvLCBpZiB3
ZSBldmVyIHRyeQorICAgIC8vIHRvIG9wdGltaXplIHRoaXMgY2FzZS4KKyAgICAvLworICAgIC8v
IC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkgc3RlYWwgdGhlIHByb3BlcnR5IHRhYmxlLCBh
bmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkKKyAgICAvLyAgIGNh
biBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxvb2tpbmcgYXQgcGFzdCB0cmFuc2l0aW9ucy4g
VGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFibGUgb25seQorICAgIC8vICAgZ3JldyBhbmQg
bmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92YWxzLCB3ZSdkIGhhdmUgdG8gY2hhbmdlIHRo
ZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRpb24KKyAgICAvLyAgIGNvZGUgdG8gaGFuZGxl
IGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dpYyB0byBnZXQgdGhlIGxpc3Qgb2YgcHJvcGVy
dGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0CisgICAgLy8gICBsYWNrcyBhIHByb3BlcnR5IHRhYmxl
IGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2ggdGhlIHNldCBvZiB0cmFuc2l0aW9ucyBzaW5j
ZSB0aGUgbGFzdAorICAgIC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEgcGlubmVkIHRhYmxlLiBU
aGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZSBjYWNoZWQK
KyAgICAvLyAgIHJlbW92YWxzLgorICAgIC8vCisgICAgLy8gLSBJbmZlcnJlZFR5cGVUYWJsZSBh
c3N1bWVzIHRoYXQgcmVtb3ZhbCBoYXMgbmV2ZXIgaGFwcGVuZWQuIFRoaXMgaXMgaW1wb3J0YW50
IHNpbmNlIGlmIHdlIGNvdWxkCisgICAgLy8gICByZW1vdmUgYSBwcm9wZXJ0eSBhbmQgdGhlbiBy
ZS1hZGQgaXQgbGF0ZXIsIHRoZW4gdGhlICJhYnNlbmNlIG1lYW5zIHRvcCIgb3B0aW1pemF0aW9u
IHdvdWxkbid0CisgICAgLy8gICB3b3JrIGFueW1vcmUsIHVubGVzcyByZW1vdmFsIGFsc28gZWl0
aGVyIHBvaXNvbmVkIHR5cGUgaW5mZXJlbmNlIChieSBkb2luZyBzb21ldGhpbmcgZXF1aXZhbGVu
dCB0bworICAgIC8vICAgaGFzQmVlbkRpY3Rpb25hcnkpIG9yIGJ5IHN0cm9uZ2x5IG1hcmtpbmcg
dGhlIGVudHJ5IGFzIFRvcCBieSBlbnN1cmluZyB0aGF0IGl0IGlzIG5vdCBhYnNlbnQsIGJ1dAor
ICAgIC8vICAgaW5zdGVhZCwgaGFzIGEgbnVsbCBlbnRyeS4KKyAgICAKICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSk7CkBAIC04NDEsNiArODY0LDQzIEBAIHZvaWQgU3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50
ZXJuYWxQcm8KICAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVlKTsKIH0KIAor
dm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygKKyAgICBWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUsCisg
ICAgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpOworICAgIEFTU0VSVCghaGFzQmVlbkRpY3Rpb25hcnkoKSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGluZmVycmVkIHR5cGUgdGFibGUgYmVmb3JlIGRvaW5nIGFueXRo
aW5nIGVsc2UsIHNvIHRoYXQgd2UgZG9uJ3QgR0MgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5CisgICAg
Ly8gZ3JhYmJlZCBhIHBvaW50ZXIgaW50byB0aGUgcHJvcGVydHkgbWFwLgorICAgIEluZmVycmVk
VHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisgICAgaWYgKCF0
YWJsZSkgeworICAgICAgICB0YWJsZSA9IEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUodm0pOwor
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2luZmVycmVkVHlwZVRh
YmxlLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIH0KKworICAgIC8vIFRoaXMgb25seSB3b3Jr
cyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9w
ZXJ0eVRhYmxlOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJv
cGVydHlUYWJsZSk7CisKKyAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZp
bmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHBy
ZXNlbnQKKyAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZSBu
b3cuCisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOworCisgICAgLy8gLi4uIGFuZCB0aGUgcHJv
cGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJv
cGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgQVNTRVJUKGVudHJ5KTsK
KworICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlw
ZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgdGFibGUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSwgYWdl
KTsKKyAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IGZhbHNlOworICAgIH0KK30KKwog
I2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKIAogUHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyog
cHJvcGVydHlNYXBIYXNoVGFibGVTdGF0cyA9IDA7CkBAIC0xMDU4LDYgKzExMTgsOCBAQCB2b2lk
IFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgIH0gZWxzZSBpZiAo
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5t
X3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkluZGV4aW5n
VHlwZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgpAQCAtODEs
MTEgKzgyLDEzIEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBVbmlxdWVkU3RyaW5n
SW1wbCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1aW50OF90IGF0dHJp
YnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7IC8vIFRoaXMgY2FjaGVzIHdoZXRoZXIg
b3Igbm90IGEgcHJvcGVydHkgaGFzIGFuIGluZmVycmVkIHR5cGUgaW4gdGhlIGluZmVycmVkIHR5
cGUgdGFibGUsIGFuZCBpcyB1c2VkIGZvciBhIGZhc3QgY2hlY2sgaW4gSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKCkuCiAKICAgICBQcm9wZXJ0eU1hcEVudHJ5KCkKICAgICAgICAgOiBrZXko
bnVsbHB0cikKICAgICAgICAgLCBvZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAgICAgLCBhdHRy
aWJ1dGVzKDApCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICB9
CiAgICAgCkBAIC05Myw2ICs5Niw3IEBAIHN0cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICAg
ICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmli
dXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVCh0aGlzLT5hdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXMpOwogICAgIH0K
QEAgLTMyMyw2ICszMjcsNyBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0m
LCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFt
ZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVkVHlwZSk7
CiAKICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgaW50ZXJuYWxpc2ggbWV0aG9kLiBJdCB3aWxs
IGNhbGwgeW91ciBmdW5jdG9yIHdoaWxlIHBvc3NpYmx5IGhvbGRpbmcgdGhlCiAgICAgLy8gU3Ry
dWN0dXJlJ3MgbG9jay4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHdoZXRoZXIgdGhlIGxvY2sgaXMg
aGVsZCBvciBub3QgaW4gYW55IHBhcnRpY3VsYXIKQEAgLTQ4MSw2ICs0ODYsNDAgQEAgcHVibGlj
OgogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVz
SWZOZWNlc3Nhcnkodm0pOwogICAgIH0KIAorICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlcygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gISFtX2luZmVycmVkVHlwZVRhYmxlOworICAgIH0K
KworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlVGFibGUqIHRhYmxlID0gbV9pbmZl
cnJlZFR5cGVUYWJsZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWJsZS0+Z2V0KHVpZCk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciBpbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CisgICAgeworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBpbmZlcnJlZFR5cGVG
b3IodWlkKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmRlc2NyaXB0b3IoKTsKKyAgICAg
ICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB3aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkK
KyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpIHx8ICghc2hvdWxkT3B0aW1p
emUgJiYgIW1faW5mZXJyZWRUeXBlVGFibGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGlt
aXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6TmV3UHJvcGVydHkpOworICAgIH0KKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAorICAgICAgICBWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1p
emUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6Ok9sZFByb3BlcnR5KTsKKyAg
ICB9CisKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpT
VmFsdWUpOwogICAgIAogICAgIC8vIERldGVybWluZXMgaWYgdGhlIHR3byBzdHJ1Y3R1cmVzIG1h
dGNoIGVub3VnaCB0aGF0IHRoaXMgb25lIGNvdWxkIGJlIHVzZWQgZm9yIGFsbG9jYXRpb25zCkBA
IC02MzIsNiArNjcxLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJ
bnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2ls
bFN0b3JlVmFsdWVTbG93KAorICAgICAgICBWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCwgSW5mZXJyZWRUeXBlVGFibGU6OlN0b3JlZFByb3BlcnR5QWdlKTsKKwogICAgIHN0YXRpYyBj
b25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGlu
dCBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIApAQCAtNjU1
LDYgKzY5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2gg
cHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVy
IHRocmVhZC4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxl
VW5zYWZlOwogCisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVk
VHlwZVRhYmxlOworCiAgICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlv
bldhdGNocG9pbnRTZXQ7CiAKICAgICBDT01QSUxFX0FTU0VSVChmaXJzdE91dE9mTGluZU9mZnNl
dCA8IDI1NiwgZmlyc3RPdXRPZkxpbmVPZmZzZXRfZml0cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxODk4
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzUsMTkgKzc1LDE5IEBAIGlubGluZSBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6c3RvcmVkUHJvdG8KIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7
Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsK
LQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3Bl
cnR5TmFtZS51aWQoKSk7Ci0gICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFs
aWRPZmZzZXQ7CisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVk
VHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0lu
ZmVycmVkVHlwZSk7CiB9CiAgICAgCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0
dHJpYnV0ZXMpCiB7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOworfQorCitBTFdB
WVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIGJvb2wmIGhhc0luZmVycmVk
VHlwZSkKK3sKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwogCkBAIC0xMDEsNiArMTAxLDcg
QEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgICAgICByZXR1
cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsK
KyAgICBoYXNJbmZlcnJlZFR5cGUgPSBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlOwogICAgIHJldHVy
biBlbnRyeS0+b2Zmc2V0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCShyZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJIb3N0Q2Fs
bFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluY3Jl
bWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNBUElW
YWx1ZVdyYXBwZXIuaCIKQEAgLTI0MSw2ICsyNDIsOCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKKyAgICBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFR5cGVU
YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFeGNlcHRpb246OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9taXNlRGVmZXJyZWRT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAxODk4MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDggQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vh
a01hcERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0
cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVTdHJ1Y3R1cmU7Cisg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBleGNlcHRpb25TdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlz
ZURlZmVycmVkU3RydWN0dXJlOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4OTgxMCkK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiAr
Mjg2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yVHlwZT4gc3RydWN0IEhhc2hUYWJsZUFkZFJlc3VsdCB7CisgICAgICAgIEhhc2hU
YWJsZUFkZFJlc3VsdCgpIDogaXNOZXdFbnRyeShmYWxzZSkgeyB9CiAgICAgICAgIEhhc2hUYWJs
ZUFkZFJlc3VsdChJdGVyYXRvclR5cGUgaXRlciwgYm9vbCBpc05ld0VudHJ5KSA6IGl0ZXJhdG9y
KGl0ZXIpLCBpc05ld0VudHJ5KGlzTmV3RW50cnkpIHsgfQogICAgICAgICBJdGVyYXRvclR5cGUg
aXRlcmF0b3I7CiAgICAgICAgIGJvb2wgaXNOZXdFbnRyeTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0u
aAkocmV2aXNpb24gMTg5ODEwKQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTc0LDEyICs3NSwxNCBAQCBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgY29uc3QgU3RyaW5nSW1wbCopOwogaW5saW5lIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1
ZSkgeyBwcmludEludGVybmFsKG91dCwgYml0d2lzZV9jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2
YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgYml0d2lz
ZV9jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CitpbmxpbmUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsJiB2YWx1ZSkg
eyBwcmludEludGVybmFsKG91dCwgJnZhbHVlKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBjaGFyKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgQ1N0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQs
IHN0YXRpY19jYXN0PGNvbnN0IENTdHJpbmcmPih2YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5h
bChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJp
bnRJbnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9
CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEF0b21pY1N0cmlu
Z0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBBdG9t
aWNTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChv
dXQsIHN0YXRpY19jYXN0PGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQoraW5s
aW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVbmlxdWVkU3RyaW5nSW1w
bCYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsICZ2YWx1ZSk7IH0KIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBib29sKTsKIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBzaWduZWQgY2hhcik7IC8v
IE5PVEU6IHRoaXMgcHJpbnRzIGFzIGEgbnVtYmVyLCBub3QgYXMgYSBjaGFyYWN0ZXI7IHVzZSBD
aGFyYWN0ZXJEdW1wIGlmIHlvdSB3YW50IHRoZSBjaGFyYWN0ZXIKIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsgLy8gTk9U
RTogc2VlIGFib3ZlLgpAQCAtMTY5LDYgKzE3MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgY29uCiAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHZhbHVlLmdldCgp
KSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgUmVmUHRyPFQ+JiB2YWx1ZSkKK3sKKyAgICBvdXQucHJpbnQocG9p
bnRlckR1bXAodmFsdWUuZ2V0KCkpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KIGNsYXNzIFZhbHVlSW5Db250ZXh0IHsKIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261417</attachid>
            <date>2015-09-17 13:53:49 -0700</date>
            <delta_ts>2015-09-17 14:39:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>225744</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyOSBA
QAorMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgcHJvcGVydHkgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODYxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGJyaW5ncyByZWN1cnNpdmUgdHlw
ZSBpbmZlcmVuY2UgdG8gSmF2YVNjcmlwdCBvYmplY3QgcHJvcGVydGllcyB0byBKU0MuIFdlIGNo
ZWNrIHRoYXQgYQorICAgICAgICB2YWx1ZSBiZWluZyBzdG9yZWQgaW50byBhIHByb3BlcnR5IG9i
ZXlzIGEgcHJvcGVydHkncyB0eXBlIGJlZm9yZSB3ZSBkbyB0aGUgc3RvcmUuIElmIGl0IGRvZXNu
J3QsCisgICAgICAgIHdlIGJyb2FkZW4gdGhlIHByb3BlcnR5J3MgdHlwZSB0byBpbmNsdWRlIHRo
ZSBuZXcgdmFsdWUuIElmIG9wdGltaXplZCBjb2RlIHdhcyByZWx5aW5nIG9uIHRoZSBvbGQKKyAg
ICAgICAgdHlwZSwgd2UgZGVvcHRpbWl6ZSB0aGF0IGNvZGUuCisKKyAgICAgICAgVGhlIHR5cGUg
c3lzdGVtIHRoYXQgdGhpcyBzdXBwb3J0cyBpbmNsdWRlcyBpbXBvcnRhbnQgcHJpbWl0aXZlIHR5
cGVzIGxpa2UgSW50MzIgYW5kIEJvb2xlYW4uIEJ1dAorICAgICAgICBpdCBnb2VzIGZ1cnRoZXIg
YW5kIGFsc28gaW5jbHVkZXMgYSB0eXBlIGtpbmQgY2FsbGVkIE9iamVjdFdpdGhTdHJ1Y3R1cmUs
IHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAgICAgZXhwZWN0IHRoZSBwcm9wZXJ0eSB0byBhbHdh
eXMgcG9pbnQgdG8gb2JqZWN0cyB3aXRoIGEgcGFydGljdWxhciBzdHJ1Y3R1cmUuIFRoaXMgb25s
eSB3b3JrcyBmb3IKKyAgICAgICAgbGVhZiBzdHJ1Y3R1cmVzIChpLmUuIHN0cnVjdHVyZXMgdGhh
dCBoYXZlIGEgdmFsaWQgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHNldCkuIEludmFsaWRhdGlvbiBv
ZiB0aGUKKyAgICAgICAgdHJhbnNpdGlvbiBzZXQgY2F1c2VzIHRoZSBwcm9wZXJ0eSB0eXBlIHRv
IGJlY29tZSBPYmplY3QgKG1lYW5pbmcgYW4gb2JqZWN0IHdpdGggYW55IHN0cnVjdHVyZSkuCisg
ICAgICAgIFRoaXMgY2FwYWJpbGl0eSBnaXZlcyB1cyByZWN1cnNpdmUgdHlwZSBpbmZlcmVuY2Uu
IEl0J3MgcG9zc2libGUgZm9yIGFuIGV4cHJlc3Npb24gbGlrZSAiby5mLmcuaCIKKyAgICAgICAg
dG8gZXhlY3V0ZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrcyBpZiAuZiBhbmQgLmcgYXJlIGJvdGgg
T2JqZWN0V2l0aFN0cnVjdHVyZS4KKworICAgICAgICBUaGUgdHlwZSBpbmZlcmVuY2Ugb2YgYSBw
cm9wZXJ0eSBpcyB0cmFja2VkIGJ5IGFuIEluZmVycmVkVHlwZSBpbnN0YW5jZSwgd2hpY2ggaXMg
YSBKU0NlbGwuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCBpdCBtYW5hZ2VzIGl0cyBvd24gbWVt
b3J5LiBUaGF0J3MgY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIERGRyBpcyBpbnRl
cmVzdGVkIGluCisgICAgICAgIG9uZSBvZiB0aGVzZSwgaXQgY2FuIGp1c3QgbGlzdCB0aGUgSW5m
ZXJyZWRUeXBlIGFzIGEgd2VhayByZWZlcmVuY2UgaW4gYWRkaXRpb24gdG8gc2V0dGluZyBhCisg
ICAgICAgIHdhdGNocG9pbnQuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBkcm9wcGVkIGJ5IHRoZSBvd25pbmcgc3RydWN0dXJlLCB0aGUgREZHCisgICAgICAg
IHdvbid0IHJlYWQgYSBkYW5nbGluZyBwb2ludGVyLiBBIG1hcHBpbmcgZnJvbSBwcm9wZXJ0eSBu
YW1lIHRvIEluZmVycmVkVHlwZSBpcyBpbXBsZW1lbnRlZCBieQorICAgICAgICBJbmZlcnJlZFR5
cGVUYWJsZSwgd2hpY2ggaXMgYWxzbyBhIEpTQ2VsbC4gRWFjaCBTdHJ1Y3R1cmUgbWF5IHBvaW50
IHRvIHNvbWUgSW5mZXJyZWRUeXBlVGFibGUuCisKKyAgICAgICAgVGhpcyBmZWF0dXJlIGNhdXNl
cyBwcm9ncmFtcyB0byBiZSBoYXBwaWVyIChydW4gZmFzdGVyIHdpdGhvdXQgb3RoZXJ3aXNlIGRv
aW5nIGJhZCB0aGluZ3MgbGlrZQorICAgICAgICB1c2luZyBsb3RzIG9mIG1lbW9yeSkgd2hlbiBm
b3VyIGNvbmRpdGlvbnMgaG9sZDoKKworICAgICAgICAxKSBBIHByb3BlcnR5IGNvbnZlcmdlcyB0
byBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgd2Ugc3VwcG9ydC4KKyAgICAgICAgMikgVGhlIHByb3Bl
cnR5IGlzIGxvYWRlZCBmcm9tIG1vcmUgZnJlcXVlbnRseSB0aGFuIGl0IGlzIHN0b3JlZCB0by4K
KyAgICAgICAgMykgVGhlIHN0b3JlcyBhcmUgYWxsIGNhY2hlZCwgc28gdGhhdCB3ZSBzdGF0aWNh
bGx5IGVtaXQgYSB0eXBlIGNoZWNrLgorICAgICAgICA0KSBXZSBkb24ndCBhbGxvY2F0ZSBhIGxv
dCBvZiBtZXRhLWRhdGEgZm9yIHRoZSBwcm9wZXJ0eSdzIHR5cGUuCisKKyAgICAgICAgV2UgbWF4
aW1pemUgdGhlIGxpa2VsaWhvb2Qgb2YgKDEpIGJ5IGhhdmluZyBhIHJpY2ggdHlwZSBzeXN0ZW0u
IEJ1dCBoYXZpbmcgYSByaWNoIHR5cGUgc3lzdGVtIG1lYW5zCisgICAgICAgIHRoYXQgYSByZWZs
ZWN0aW5nIHB1dCB0byBhIHByb3BlcnR5IGhhcyB0byBoYXZlIGEgbGFyZ2Ugc3dpdGNoIG92ZXIg
dGhlIGluZmVycmVkIHR5cGUgdG8gZGVjaWRlIGhvdworICAgICAgICB0byBkbyB0aGUgdHlwZSBj
aGVjay4gVGhhdCdzIHdoeSB3ZSBuZWVkICgzKS4gV2UgZW5zdXJlICgzKSBieSBoYXZpbmcgZXZl
cnkgcmVmbGVjdGl2ZSBwcm9wZXJ0eQorICAgICAgICBzdG9yZSAoaS5lLiBwdXREaXJlY3RJbnRl
cm5hbCBpbiBhbnkgY29udGV4dCB0aGF0IGlzbid0IFB1dEJ5SWQpIGZvcmNlIHRoZSBpbmZlcnJl
ZCB0eXBlIHRvIGJlY29tZQorICAgICAgICBUb3AuIFdlIGRvbid0IHJlYWxseSB3b3JyeSBhYm91
dCBlbnN1cmluZyAoMik7IHRoaXMgaXMgc3RhdGlzdGljYWxseSB0cnVlIGZvciBtb3N0IHByb2dy
YW1zCisgICAgICAgIGFscmVhZHkuCisKKyAgICAgICAgUHJvYmFibHkgdGhlIG1vc3Qgc3VidGxl
IHRyaWNrZXJ5IGdvZXMgaW50byAoNCkuIExvZ2ljYWxseSB3ZSdkIGxpa2UgdG8gc2F5IHRoYXQg
ZWFjaAorICAgICAgICAoU3RydWN0dXJlLCBQcm9wZXJ0eSkgbWFwcyB0byBpdHMgb3duIEluZmVy
cmVkVHlwZS4gSWYgc3RydWN0dXJlIFMxIGhhcyBhIHRyYW5zaXRpb24gZWRnZSB0byBTMiwKKyAg
ICAgICAgdGhlbiB3ZSBjb3VsZCBlbnN1cmUgdGhhdCB0aGUgSW5mZXJyZWRUeXBlIEkxIHdoZXJl
IChTMSwgUHJvcGVydHkpLT5JMSBoYXMgYSBkYXRhIGZsb3cgY29uc3RyYWludAorICAgICAgICB0
byBJMiB3aGVyZSAoUzIsIFByb3BlcnR5KS0+STIuIFRoYXQgd291bGQgd29yaywgYnV0IGl0IHdv
dWxkIGludm9sdmUgYSBsb3Qgb2YgbWVtb3J5LiBBbmQgd2hlbiBJMQorICAgICAgICBnZXRzIGlu
dmFsaWRhdGVkIGluIHNvbWUgd2F5LCBpdCB3b3VsZCBoYXZlIHRvIHRlbGwgSTIgYWJvdXQgaXQs
IGFuZCB0aGVuIEkyIG1pZ2h0IHRlbGwgb3RoZXIKKyAgICAgICAgSW5mZXJyZWRUeXBlIG9iamVj
dHMgZG93bnN0cmVhbS4gVGhhdCdzIG1hZG5lc3MuIFNvLCB0aGUgZmlyc3QgbWFqb3IgY29tcHJv
bWlzZSB0aGF0IHdlIG1ha2UgaGVyZQorICAgICAgICBpcyB0byBzYXkgdGhhdCBpZiBzb21lIHBy
b3BlcnR5IGhhcyBzb21lIEluZmVycmVkVHlwZSBhdCBzb21lIFN0cnVjdHVyZSwgdGhlbiBhbnl0
aW1lIHdlCisgICAgICAgIHRyYW5zaXRpb24gZnJvbSB0aGF0IFN0cnVjdHVyZSwgdGhlIG5ldyBT
dHJ1Y3R1cmUgc2hhcmVzIHRoZSBzYW1lIEluZmVycmVkVHlwZSBmb3IgdGhhdCBwcm9wZXJ0eS4K
KyAgICAgICAgVGhpcyB1bmlmaWVzIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBvdmVyIHRoZSBl
bnRpcmUgdHJhbnNpdGlvbiB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBTdHJ1Y3R1cmUgYXQKKyAgICAg
ICAgd2hpY2ggdGhlIHByb3BlcnR5IHdhcyBhZGRlZC4gQnV0IHRoaXMgd291bGQgc3RpbGwgbWVh
biB0aGF0IGVhY2ggU3RydWN0dXJlIHdvdWxkIGhhdmUgaXRzIG93bgorICAgICAgICBJbmZlcnJl
ZFR5cGVUYWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGF0IGJlY2F1c2UgZXhwZXJpZW5jZSB3aXRoIFBy
b3BlcnR5VGFibGUgc2hvd3MgdGhhdCB0aGlzIGNhbiBiZQorICAgICAgICBhIG1ham9yIG1lbXJv
eSBob2cuIFNvLCB3ZSBkb24ndCBjcmVhdGUgYW4gSW5mZXJyZWRUeXBlVGFibGUgdW50aWwgc29t
ZW9uZSBhZGRzIGEgcHJvcGVydHkgdGhhdCBpcworICAgICAgICBzdWJqZWN0IHRvIHR5cGUgaW5m
ZXJlbmNlIChpLmUuIGl0IHdhcyBhZGRlZCBub24tcmVmbGVjdGl2ZWx5KSwgYW5kIHdlIHNoYXJl
IHRoYXQgSW5mZXJyZWRUeXBlVGFibGUKKyAgICAgICAgd2l0aCB0aGUgZW50aXJlIHN0cnVjdHVy
ZXQgdHJhbnNpdGlvbiB0cmVlIHJvb3RlZCBhdCB0aGUgU3RydWN0dXJlIHRoYXQgaGFkIHRoZSBm
aXJzdCBpbmZlcnJlZAorICAgICAgICBwcm9wZXJ0eS4gV2UgYWxzbyBkcm9wIHRoZSBJbmZlcnJl
ZFR5cGVUYWJsZSBhbnl0aW1lIHRoYXQgd2UgZG8gYSBkaWN0aW9uYXJ5IHRyYW5zaXRpb24sIGFu
ZCB3ZQorICAgICAgICBkb24ndCBhbGxvdyBmdXJ0aGVyIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNl
IGlmIGEgc3RydWN0dXJlIGhhZCBldmVyIGJlZW4gYSBkaWN0aW9uYXJ5LgorCisgICAgICAgIFRo
aXMgaXMgYSAzJSBzcGVlZC11cCBvbiBPY3RhbmUgYW5kIGEgMTIlIHNwZWVkLXVwIG9uIEtyYWtl
biBvbiBteSBzZXR1cC4gSXQncyBub3QgYSBzaWduaWZpY2FudAorICAgICAgICBzbG93LWRvd24g
b24gYW55IGJlbmNobWFyayBJIHJhbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmJyYW5jaFRlc3Q2NCk6CisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2XzY0OjpicmFuY2hUZXN0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82
NDo6dGVzdDY0KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Q
dXRCeUlkRmxhZ3MuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBieXRlY29kZS9QdXRCeUlkRmxhZ3MuaDoKKyAgICAgICAgKEpTQzo6ZW5jb2RlU3RydWN0dXJl
SUQpOgorICAgICAgICAoSlNDOjpkZWNvZGVTdHJ1Y3R1cmVJRCk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGcm9tTExJbnQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAg
ICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1w
SW5Db250ZXh0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OnJlcXVpcmVkVHlwZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRJbnN0cnVjdGlvbjo6VW5saW5rZWRJ
bnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAgICAgICAo
SlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0Ojp0b3VjaCk6CisgICAgICAgIChKU0M6OklubGluZVdh
dGNocG9pbnRTZXQ6OmlzQmVpbmdXYXRjaGVkKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRk
Q29uc3RhbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGlyZWN0UHV0QnlJ
ZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZpbHRlckJ5VmFsdWUpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRl
cik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZv
clJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjptZXJn
ZU9TUkVudHJ5VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlw
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSk6CisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpzZXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1R5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnN0b3JlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAqIGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcnNFeGl0U3RhdGUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRD
b25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0
R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpl
bWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
OjphZGRCYXNlQ2hlY2spOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6OkRlc2lyZWRJ
bmZlcnJlZFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9w
ZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9i
amVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6ZXhwZWN0ZWQp
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6OmlzU3RpbGxWYWxpZCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6YWRkKToKKyAgICAgICAg
KEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6aGFzaCk6CisgICAgICAgIChKU0M6
OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6
OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVz
aXJlZEluZmVycmVkVHlwZUhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRJ
bmZlcnJlZFR5cGVIYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFR5cGVBZGFwdG9yOjph
ZGQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNo
cG9pbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVk
V2F0Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YWRk
TGF6aWx5KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQpOgorICAg
ICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjpkdW1wSW5Db250ZXh0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpJbmZlcnJlZFR5cGVBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVkKToKKyAgICAg
ICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFz
ZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNTYWZlVG9M
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5
R2V0Q29uc3RhbnRDbG9zdXJlVmFyKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6cmVnaXN0ZXJJbmZlcnJlZFR5cGUpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eSk6CisgICAgICAgICogZGZnL0RG
R0luZmVycmVkVHlwZUNoZWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6aW5zZXJ0
SW5mZXJyZWRUeXBlQ2hlY2spOgorICAgICAgICAqIGRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5o
OiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJvcGVydHlU
eXBlS2V5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6UHJv
cGVydHlUeXBlS2V5KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Om9wZXJh
dG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6c3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6OnVpZCk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZH
OjpQcm9wZXJ0eVR5cGVLZXk6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bl
cnR5VHlwZUtleTo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5Ojpp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBl
S2V5OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6
OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6ZGVsZXRlZFVJRCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5SGFzaDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGRmZy9E
RkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZVRvRXhlY3V0ZUVkZ2U6
Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ubHlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZvckVhY2gpOgorICAgICAgICAqIGRmZy9ERkdV
c2VLaW5kLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZn
L0RGR1VzZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAg
ICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2
YWxpZGF0ZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tT
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVDaGVja0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9MTFZNOjpudW1iZXJPck5vdENlbGxUb0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9MTFZNOjpjaGVja0luZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvTExWTTo6bG9hZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUNlbGxPck90aGVyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVNYWNoaW5lSW50KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpk
ZWNvZGVkQ29kZU1hcEZvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNo
SWZOb3RUeXBlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4pOgor
ICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpicmFuY2hJZkVxdWFsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpi
cmFuY2hJZk5vdENlbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElm
Q2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RPdGhlcik6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZJbnQzMik6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RJbnQzMik6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOdW1iZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmJyYW5jaElmTm90TnVtYmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpicmFuY2hJZkVtcHR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFu
Y2hTdHJ1Y3R1cmUpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6
dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkluZmVycmVkVHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBl
OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6RGVzY3JpcHRvcjo6Zm9yVmFsdWUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3I6OmZvckZsYWdzKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yOjpwdXRCeUlkRmxhZ3MpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpy
ZW1vdmVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6
OnN1YnN1bWVzKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1w
SW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1w
KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5cGUpOgorICAgICAgICAo
SlNDOjpJbmZlcnJlZFR5cGU6On5JbmZlcnJlZFR5cGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFR5cGU6OmNhbldhdGNoKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjphZGRXYXRjaHBv
aW50KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
SW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3cpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFR5cGU6Om1ha2VUb3BTbG93KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlOjpzZXQpOgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJu
YWwpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlRmluYWxp
emVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlw
ZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKToKKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SW5mZXJy
ZWRUeXBlVGFibGU6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBlVGFibGU6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6SW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKToKKyAgICAgICAgKEpT
Qzo6SW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3ApOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5
cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFibGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVU
YWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlw
ZVRhYmxlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVudHJ5OjpQcm9wZXJ0eU1hcEVudHJ5
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvcHJvcC10eXBlLW9iamVjdC10aGVuLXN0cmluZy5qczogQWRkZWQuCisgICAgICAgIChmb28u
cmV0dXJuLm8uZi50b1N0cmluZyk6CisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAg
ICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cmluZy10aGVuLW9iamVjdC5qczogQWRk
ZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKHRvU3RyaW5nKToK
KwogMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IDAuMCBzaG91bGQgcmVhbGx5IGJlIDAuMApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCiAgICAgZGZnL0RG
R0hlYXBMb2NhdGlvbi5jcHAKICAgICBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCisg
ICAgZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAogICAgIGRmZy9ERkdJbnNlcnRpb25TZXQu
Y3BwCiAgICAgZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAgIGRmZy9E
RkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKQEAgLTQ5Niw2ICs0OTcsOCBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAgcnVudGltZS9JZGVudGlmaWVy
LmNwcAogICAgIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAogICAgIHJ1bnRpbWUvSW5mZXJyZWRW
YWx1ZS5jcHAKKyAgICBydW50aW1lL0luZmVycmVkVHlwZS5jcHAKKyAgICBydW50aW1lL0luZmVy
cmVkVHlwZVRhYmxlLmNwcAogICAgIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKICAg
ICBydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAKICAgICBydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQyNyw2ICs0MjcsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dy
YXBoU2FmZXBvaW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdI
ZWFwTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHSW5zZXJ0aW9uU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIiAv
PgpAQCAtNzQ1LDYgKzc0Niw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XElkZW50aWZpZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmRleGluZ1R5cGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmZlcnJlZFZhbHVlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SW5mZXJyZWRUeXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SW5mZXJyZWRUeXBlVGFibGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5jcHAiIC8+CkBA
IC0xMTMyLDYgKzExMzUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NT
RVBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRENFUGhhc2Uu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkSWRlbnRpZmll
cnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkSW5mZXJy
ZWRUeXBlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZFRy
YW5zaXRpb25zLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmgiIC8+CkBAIC0xMTYwLDYgKzExNjQsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVhcExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbmZlcnJlZFR5cGVDaGVjay5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlclJhbmdlT3B0aW1pemF0
aW9uUGhhc2UuaCIgLz4KQEAgLTEyMTEsNiArMTIxNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb3BlcnR5VHlwZUtleS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+
CkBAIC0xNTgzLDYgKzE1ODksOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxJbmRleGluZ0hlYWRlcklubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEluZmVycmVkVmFsdWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5mZXJyZWRUeXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEluZmVycmVkVHlwZVRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSW50MTZBcnJheS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbnQzMkFycmF5LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTEyNTEsNiArMTI1MSw5IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIj4KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiPgogICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTE4NTEsNiArMTg1NCw4
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERpcmVjdEFyZ3VtZW50cy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERpcmVjdEFyZ3VtZW50
c09mZnNldC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVy
cmVkVmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZl
cnJlZFR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZl
cnJlZFR5cGVUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XFNjb3BlT2Zmc2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
U2NvcGVkQXJndW1lbnRzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcU2NvcGVkQXJndW1lbnRzVGFibGUuY3BwIiAvPgpAQCAtMzY2MSw2ICszNjY2LDkgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkSWRlbnRpZmllcnMuaCI+CiAg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCI+CisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0zNzI0LDYgKzM3MzIsOSBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiPgogICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdJbmZlcnJlZFR5cGVDaGVjay5oIj4KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIj4KICAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00NDA5LDYgKzQ0MjAsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiPgog
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcm9wZXJ0eVR5cGVLZXkuaCI+CisgICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgiPgogICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQ0NTIsNiArNDQ2Niw4IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNPZmZzZXQuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJyZWRWYWx1ZS5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFR5cGUuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJyZWRUeXBlVGFibGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2NvcGVPZmZzZXQuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2NvcGVkQXJndW1lbnRzLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiIC8+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg5OTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDggQEAKIAkJMEYwNDM5NkUxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDQzOTZDMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21i
aW5lZExpdmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMDVDM0IyMTY4M0NGOEYwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYw
Nzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAx
MDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5m
ZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovOyB9Owor
CQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBBNzUyMTFCOTRCRkE5MDAxMTA2
NjAgLyogSW5mZXJyZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4Mzk3
MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgKi87IH07CiAJCTBGMEI4MzlEMTRC
Q0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzOTgxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1
bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYwQjgzQTcxNEJDRjUwNzAwODg1QjRGIC8qIENvZGVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyog
Q29kZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNTQ2LDYgKzU0OCw4IEBACiAJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdy
aXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZD
ODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAw
Q0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovOyB9OworCQkwRkM4NDE2ODFCQThD
MzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODQxNjYxQkE4QzMyMTAwNjE4MzdEIC8q
IERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCAqLzsgfTsKKwkJMEZDODQxNjkxQkE4QzMyMTAwNjE4
MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NzFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuY3BwICovOyB9OwogCQkwRkM5N0YzNDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM5N0YzMDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZDOTdGM0QxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtNzQ1LDYgKzc0OSwxMCBAQAogCQkwRkZC
OTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkMxNjdGRTg0
QjAwM0MyRjhEIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1
REIgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0
aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzBEQUQwMzBGQjFF
QjFBMDA4MkQyMDUgLyogTm9kZUNvbnN0cnVjdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJ
bmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUu
Y3BwICovOyB9OworCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5
MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRkM5MjE0MUI5NEU4M0UwMDcx
REQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVz
aXJlZEluZmVycmVkVHlwZS5oICovOyB9OworCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyog
REZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZG
Qzk5RDExODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8q
IENvbnN0YW50TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRkM5OUQ0MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmlu
Z1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi87IH07CiAJCTBGRkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1
ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRkM5OUQzMTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5l
dXRlcmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTkxNyw2ICsxOTI1LDggQEAKIAkJMEYwNDM5NkMxQjAzREMwQjAwOTU5
OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ29tYmluZWRMaXZlbmVzcy5oOyBwYXRoID0gZGZnL0RGR0NvbWJpbmVkTGl2ZW5l
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNUMzQjIxNjgzQ0Y4RjAwQkFG
NDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZn
L0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwNzc2QkQxNEZGMDAyODAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uRWZmb3J0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAv
KiBJbmZlcnJlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5mZXJyZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjEx
Qjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYwQjgzOTcxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50VGh1bmtzLmNwcDsgcGF0aCA9IGxsaW50L0xM
SW50VGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgzOTgxNEJD
RjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IExMSW50VGh1bmtzLmg7IHBhdGggPSBsbGludC9MTEludFRodW5rcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzODYsNiArMjM5Niw4IEBACiAJCTBGQzcxMkUxMTdD
RDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JpdGVCYXJyaWVyU3VwcG9ydC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5m
ZXJyZWRUeXBlQ2hlY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwOyBwYXRoID0gZGZnL0RGR0luZmVycmVkVHlwZUNoZWNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDODQxNjcxQkE4QzMyMTAwNjE4
MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0luZmVycmVkVHlwZUNoZWNrLmg7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBl
Q2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGMkYxODIwMjBENzAw
MkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YzMDE4MjAyMEQ3MDAyQzlC
MjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52
YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NzMsNiArMjU4NSwxMCBAQAogCQkwRkY5Q0U3MjFCOUNE
NkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVy
cmVkVHlwZVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZmVycmVkVHlwZVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzky
MTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJy
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9w
ZXJ0eVR5cGVLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvcGVy
dHlUeXBlS2V5Lmg7IHBhdGggPSBkZmcvREZHUHJvcGVydHlUeXBlS2V5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRNb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgwMDlDMTBBQiAvKiBB
cnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQ2NTEsOCArNDY2Nyw4IEBACiAJCQkJQkMwMkU5OEIwRTE4M0UzODAwMEY5
Mjk3IC8qIEVycm9ySW5zdGFuY2UuaCAqLywKIAkJCQlCQzAyRTkwNjBFMTgzOURCMDAwRjkyOTcg
LyogRXJyb3JQcm90b3R5cGUuY3BwICovLAogCQkJCUJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAv
KiBFcnJvclByb3RvdHlwZS5oICovLAotCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBF
eGNlcHRpb24uaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9u
LmNwcCAqLywKKwkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi8s
CiAJCQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovLAog
CQkJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8sCiAJCQkJ
MTQyOUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLApAQCAt
NDY4Niw2ICs0NzAyLDEwIEBACiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJ
bmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRl
eGluZ1R5cGUuaCAqLywKKwkJCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRU
eXBlLmNwcCAqLywKKwkJCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBl
LmggKi8sCisJCQkJMEZGQzkyMEYxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxl
LmNwcCAqLywKKwkJCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFi
bGUuaCAqLywKIAkJCQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5j
cHAgKi8sCiAJCQkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAq
LywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHAgKi8sCkBAIC00NzM2LDEwICs0NzU2LDEwIEBACiAJCQkJMEYyQjY2QkMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAogCQkJCUE3QkRBRUM0MTdGNEVB
MTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuY3BwICovLAogCQkJCUE3QkRBRUM1MTdGNEVB
MTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCAqLywKLQkJCQk4NkZBOUU4RjE0MkJCQjJE
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKLQkJCQk4NkZBOUU5MDE0MkJCQjJF
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJOEIwRjQyNEIxQUJENkRFMjAw
MzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5jcHAgKi8sCiAJCQkJOEIwRjQyNEExQUJENkQyRjAw
MzkxN0VBIC8qIEpTQXJyb3dGdW5jdGlvbi5oICovLAorCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAorCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNC
RjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1N0NGNDU3MTlCRjY2NjIwMDRBQ0JGMiAvKiBK
U0NhbGxlZS5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAvKiBKU0NlbGwuY3Bw
ICovLApAQCAtNTA0Myw5ICs1MDYzLDkgQEAKIAkJCQkwRkUwNTAyNDFBQTkwOTU2MDBEMzNCMzMg
LyogVmFyT2Zmc2V0LmggKi8sCiAJCQkJRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNw
cCAqLywKIAkJCQlFMThFM0E1NjBERjkyNzhDMDBEOTBCMzQgLyogVk0uaCAqLywKLQkJCQlGRTkw
QkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi8sCiAJCQkJRkU1OTMyQTUxODND
NUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8sCiAJCQkJRkU1OTMyQTYxODNDNUEy
NjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovLAorCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZC
M0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuY3BwICovLAogCQkJCUZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRv
Zy5oICovLAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywK
QEAgLTUxOTcsNiArNTIxNyw3IEBACiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERG
R0RDRVBoYXNlLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2ly
ZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERG
R0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAorCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAv
KiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCiAJCQkJQzJDMEY3Q0IxN0JCRkM1QjAwNDY0
RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgKi8sCiAJCQkJQzJDMEY3Q0MxN0JCRkM1
QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oICovLAogCQkJCTBGRTg1MzQ5MTcy
M0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovLApAQCAtNTI0MSw2
ICs1MjYyLDggQEAKIAkJCQkwRjJGQ0NGMzE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZl
cG9pbnQuaCAqLywKIAkJCQkwRkIxNzY1QzE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0
aW9uLmNwcCAqLywKIAkJCQkwRkIxNzY1RDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0
aW9uLmggKi8sCisJCQkJMEZDODQxNjYxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlw
ZUNoZWNrLmNwcCAqLywKKwkJCQkwRkM4NDE2NzFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaCAqLywKIAkJCQkwRkIxNEUyMDE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5s
aW5lQ2FjaGVXcmFwcGVyLmggKi8sCiAJCQkJMEZCMTRFMjIxODEzMDk1NTAwOUI2QjREIC8qIERG
R0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaCAqLywKIAkJCQlBNzA0RDkwMDE3QTBCQUE4MDA2
QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwICovLApAQCAtNTI3MywxMCArNTI5
NiwxMCBAQAogCQkJCTBGQjRCNTFEMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2ZWRTdGF0
ZS5oICovLAogCQkJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVy
Q3JlYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJQTc2N0I1QjQxN0EwQjk2NTAwNjNEOTQwIC8qIERG
R0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmggKi8sCi0JCQkJMEY1ODc0RUIxOTRGRUIxMjAw
QUFCMkMxIC8qIERGR01heUV4aXQuY3BwICovLAotCQkJCTBGNTg3NEVDMTk0RkVCMTIwMEFBQjJD
MSAvKiBERkdNYXlFeGl0LmggKi8sCiAJCQkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCAqLywKIAkJCQk3OUY4RkMxRDFCOUZFRDBG
MDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjU4
NzRFQjE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCisJCQkJMEY1ODc0RUMx
OTRGRUIxMjAwQUFCMkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQkwRjE3MjVGRTFCNDg3MTlB
MDBBQzNBNTUgLyogREZHTWluaWZpZWRHcmFwaC5jcHAgKi8sCiAJCQkJMEYyQkRDM0QxNTIyODAx
NzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCAqLywKIAkJCQkwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovLApAQCAtNTM0NCw2ICs1MzY3LDcgQEAKIAkJ
CQkwRjNFMDFBOTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oICovLAog
CQkJCTBGMkI5Q0UwMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5j
cHAgKi8sCiAJCQkJMEYyQjlDRTExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmggKi8sCisJCQkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5
VHlwZUtleS5oICovLAogCQkJCTBGQjE3NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuY3BwICovLAogCQkJCTBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUu
aCAqLywKIAkJCQkwRjNBMUJGNzFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5n
UGhhc2UuY3BwICovLApAQCAtNTkzNCw2ICs1OTU4LDcgQEAKIAkJCQlGRTUwNjg2NTFBRTI0NjM5
MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDQy
Q0IyNTFBNkNEQjhDMDA1RDNEN0MgLyogSlNJbnB1dHMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJ
CUZFMUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOTExQTA0MTc3QzAwNkEzMDZE
IC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEw
MzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAt
NjA0Nyw2ICs2MDcyLDcgQEAKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9y
aWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdB
U01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRC
RTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVy
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtT
ZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyNiwxMiArNjM1MiwxNCBAQAogCQkJ
CTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUEwQTEyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExTdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZDODQxNjkxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVy
cmVkVHlwZUNoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0ZDQzI2RDE3QTBCNkFBMDA3ODZE
MUEgLyogRlRMU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTIxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjAxNzA4
QjAwNzAwQkI3MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJl
ZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkw
MDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2
RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDk3
LDYgKzY1MjUsNyBAQAogCQkJCUJDMThDNDFGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Z1bmN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCQTE3OTc2MDNEMDA5ODAyOEMgLyogSlNGdW5j
dGlvbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzky
MTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDM5LDYgKzc0NjgsNyBAQAogCQkJ
CTE0MjgwODJFMTA3RUMwNTcwMDEzRTdCMiAvKiBDb25zdHJ1Y3REYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1N0QyM0YxMTg5MUI1QjQwMDMxQzdGQSAvKiBDb250ZW50U2VhcmNoVXRpbGl0
aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBD
b3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURE
NjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0Mx
OENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzgxOSw2ICs3ODQ5LDcgQEAKIAkJCQkwRkYwNTRGOTFBQzM1QjQ0MDBF
NUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2RTNDNjFBMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNo
ZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYxNDM1MUFERjA5MDEwMEVENzkyQyAvKiBE
RkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMyMEEz
RTkxRjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUQ3MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzg1Myw2ICs3ODg0LDcgQEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAg
LyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwNzQxQjg0
MjFDMDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MjkwMDlDMTc5NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2
IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3
M0IyNjAwNTYxMkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xODUzLDYgKzE4NTMsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gSnVtcChtYWtlQnJhbmNoKGNvbmQpKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaFRlc3Q2
NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW02NCBtYXNr
KQorICAgIHsKKyAgICAgICAgbW92ZShtYXNrLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURB
bmRJbnZhbGlkYXRlKCkpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIHJlZywg
ZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBtYXNrKQogICAgIHsK
ICAgICAgICAgbG9hZDY0KGFkZHJlc3MsIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZElu
dmFsaWRhdGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwNSw2ICs2MDUsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCisgICAgSnVt
cCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVz
dGVkSW1tNjQgbWFzaykKKyAgICB7CisgICAgICAgIG1vdmUobWFzaywgc2NyYXRjaFJlZ2lzdGVy
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCByZWcsIHNjcmF0Y2hSZWdpc3Rl
cik7CisgICAgfQorCiAgICAgdm9pZCB0ZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkxLDYgKzY5MSwxNSBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgfQogCiAgICAgY2FzZSBSZXBsYWNlOiB7Cisg
ICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBl
Rm9yKGlkZW50LmltcGwoKSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkhhdmUgdHlwZTogIiwgdHlwZS0+ZGVzY3JpcHRvcigpLCAiXG4iKTsK
KyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAgICAgICAg
ICBqaXQuYnJhbmNoSWZOb3RUeXBlKAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsIHNj
cmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgQ0NhbGxIZWxwZXJzOjpEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7CisgICAgICAgIAogICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQobV9vZmZzZXQpKSB7CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAg
ICAgICAgICAgICB2YWx1ZVJlZ3MsCkBAIC03MTQsNiArNzIzLDE1IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RydWN0
dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpOwogCisgICAgICAgIGlmIChJbmZlcnJl
ZFR5cGUqIHR5cGUgPSBuZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwo
KSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IkhhdmUgdHlwZTogIiwgdHlwZS0+ZGVzY3JpcHRvcigpLCAiXG4iKTsKKyAgICAgICAgICAgIHN0
YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoSWZO
b3RUeXBlKAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUt
PmRlc2NyaXB0b3IoKSwgQ0NhbGxIZWxwZXJzOjpEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2
ZSB0eXBlLlxuIik7CisgICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCiAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQdXRC
eUlkRmxhZ3MuaCIKIAorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KQEAgLTM1LDE2ICszNiwxNCBAQCBuYW1lc3BhY2UgV1RG
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsKLSAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJp
bmdPdXQ7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCJ8Iik7CiAgICAgaWYgKGZsYWdzICYgUHV0
QnlJZElzRGlyZWN0KQotICAgICAgICBzdHJpbmdPdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJJc0RpcmVjdCIpOwogCi0gICAgQ1N0cmluZyBz
dHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7Ci0gICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkp
Ci0gICAgICAgIG91dC5wcmludCgiTm9uZSIpOwotICAgIGVsc2UKLSAgICAgICAgb3V0LnByaW50
KHN0cmluZyk7CisgICAgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQgPSBJbmZlcnJlZFR5cGU6Omtp
bmRGb3JGbGFncyhmbGFncyk7CisgICAgb3V0LnByaW50KGNvbW1hLCBraW5kKTsKKyAgICBpZiAo
SW5mZXJyZWRUeXBlOjpoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgIG91dC5wcmludCgiOiIs
IGJpdHdpc2VfY2FzdDxpbnQzMl90PihkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZEZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRGbGFncy5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsy
Niw3MCBAQAogI2lmbmRlZiBQdXRCeUlkRmxhZ3NfaAogI2RlZmluZSBQdXRCeUlkRmxhZ3NfaAog
CisjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAotZW51
bSBQdXRCeUlkRmxhZ3MgeworZW51bSBQdXRCeUlkRmxhZ3MgOiBpbnRwdHJfdCB7CiAgICAgUHV0
QnlJZE5vbmUgPSAwLAotICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDEKKworICAgIC8vIFRoaXMgZmxh
ZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHV0X2J5X2lkIGlzIGRpcmVjdC4gVGhhdCBtZWFucyB0aGF0
IHdlIHN0b3JlIHRoZSBwcm9wZXJ0eSB3aXRob3V0CisgICAgLy8gY2hlY2tpbmcgaWYgdGhlIHBy
b3RvdHlwZSBjaGFpbiBoYXMgYSBzZXR0ZXIuCisgICAgUHV0QnlJZElzRGlyZWN0ID0gMHgxLAor
ICAgIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrID0gMHgxLAorCisgICAgLy8gTk9URTogVGhl
IHZhbHVlcyBiZWxvdyBtdXN0IGJlIGluIHN5bmMgd2l0aCB3aGF0IGlzIGluIExvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtLgorCisgICAgLy8gRGV0ZXJtaW5pbmcgdGhlIHJlcXVpcmVkIGluZmVycmVk
IHR5cGUgaW52b2x2ZXMgZmlyc3QgY2hlY2tpbmcgdGhlIHByaW1hcnkgdHlwZSBtYXNrLCBhbmQg
dGhlbgorICAgIC8vIHVzaW5nIHRoYXQgdG8gZmlndXJlIG91dCB0aGUgbWVhbmluZyBvZiB0aGUg
c2Vjb25kYXJ5IG1hc2s6CisgICAgLy8gc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlw
ZU1hc2spIHsKKyAgICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAv
LyAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgIC8v
ICAgICAuLi4KKyAgICAvLyAgICAgfQorICAgIC8vICAgICBicmVhazsKKyAgICAvLyBjYXNlIFB1
dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgLy8gY2FzZSBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAvLyAgICAgU3RydWN0
dXJlSUQgc3RydWN0dXJlSUQgPSBkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncyk7CisgICAgLy8gICAg
IGJyZWFrOworICAgIC8vIH0KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrID0gMHg2LAorICAg
IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MCwgLy8gTmVlZCB0byBjaGVjayB0aGUg
c2Vjb25kYXJ5IHR5cGUgbWFzayBmb3IgdGhlIHR5cGUuCisgICAgUHV0QnlJZFByaW1hcnlUeXBl
T2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MiwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVy
ZSBJRC4KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9
IDB4NCwgLy8gU2Vjb25kYXJ5IHR5cGUgaGFzIHN0cnVjdHVyZSBJRC4KKworICAgIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlTWFzayA9IC0weDgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20g
PSAweDAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuID0gMHg4LAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50
MzIgPSAweDE4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyID0gMHgyMCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3QgPSAweDMwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciA9
IDB4MzgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCiB9OwogCitpbmxpbmUg
UHV0QnlJZEZsYWdzIGVuY29kZVN0cnVjdHVyZUlEKFN0cnVjdHVyZUlEIGlkKQoreworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCkgPDwgMyk7CisjZWxzZQorICAgIFB1dEJ5SWRGbGFncyBy
ZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8UHV0QnlJZEZsYWdzPihpZCk7CisgICAgQVNTRVJUKCEocmVz
dWx0ICYgflB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaykpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZW5kaWYKK30KKworaW5saW5lIFN0cnVjdHVyZUlEIGRlY29kZVN0cnVjdHVyZUlEKFB1dEJ5SWRG
bGFncyBmbGFncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgPj4gMyk7CisjZWxzZQorICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8U3RydWN0dXJlSUQ+KGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKTsKKyNlbmRp
ZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwog
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVy
ZSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7
CiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVy
ZUlEVGFibGUoKS5nZXQobmV3U3RydWN0dXJlSUQpOwpAQCAtMTAzLDcgKzEwMyw4IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gUHV0
QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgb2Zmc2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisg
ICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCwgbmV3
U3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogfQogCiBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQpAQCAtMTYyLDcgKzE2Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICB9CkBAIC0xOTMsNyArMTk0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KHNsb3dQYXRoU3RhdGUpOwotICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9
IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
MjA2LDcgKzIwOCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRp
dHkoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhT
dGF0ZSk7CiAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0
aW9uKAotICAgICAgICAgICAgICAgICAgICBhY2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdT
dHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBh
Y2Nlc3Muc3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwgY29uZGl0aW9uU2V0LCBv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+aW5mZXJy
ZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTMyOSw4ICszMzIsMTAgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIC8vIFNvLCBi
ZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFrZSBzbG93IHBhdGguCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJ
ZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKSkKKworICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQgdmFyaWFudCA9CisgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRv
ckZvcih1aWQpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFu
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMzU2LDEzICszNjEsMTYgQEAg
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAg
CiAgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVj
dHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQpOworICAgICAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPQorICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwg
dWlkLCAwLCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0
LmFwcGVuZFZhcmlhbnQoCi0gICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihz
dHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0KSk7CisgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUs
IHRyYW5zaXRpb24sIGNvbmRpdGlvblNldCwgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHRyYW5z
aXRpb24tPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSkpOwogICAgICAgICBpZiAoIWRp
ZEFwcGVuZCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsNyBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9u
ZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsKICAgICBtX2NvbmRpdGlvblNldCA9
IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7Cisg
ICAgbV9yZXF1aXJlZFR5cGUgPSBvdGhlci5tX3JlcXVpcmVkVHlwZTsKICAgICBpZiAob3RoZXIu
bV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKICAgICBlbHNl
CkBAIC01MiwxOCArNTMsMjEgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVy
YXRvcgogICAgIHJldHVybiAqdGhpczsKIH0KIAotUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK1B1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKICAgICByZXN1bHQu
bV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigK
ICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFy
aWFudCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CkBAIC03MSw2ICs3
NSw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW8KICAgICByZXN1
bHQubV9uZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CiAgICAgcmVzdWx0Lm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICBy
ZXN1bHQubV9yZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtODUsNiArOTAsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0
dGVyKAogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBXVEY6
Om1vdmUoY2FsbExpbmtTdGF0dXMpOworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IEluZmVy
cmVkVHlwZTo6VG9wOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEzNCw5ICsxNDAsMTIg
QEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29ucwogewogICAgIGlmICht
X29mZnNldCAhPSBvdGhlci5tX29mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fcmVxdWlyZWRUeXBlICE9IG90aGVyLm1fcmVxdWlyZWRUeXBlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIFJlcGxhY2U6
CisgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAg
ICAgICAgIGNhc2UgUmVwbGFjZTogewogICAgICAgICAgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSk7CkBAIC0xNTgsNiArMTY3LDcgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0
ZW1wdFRvTWVyZ2UoY29ucwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKICAgICBjYXNlIFRyYW5zaXRpb246CiAg
ICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CkBAIC0yMTAsMTQgKzIyMCwxNSBAQCB2b2lk
IFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgIAogICAgIGNhc2Ug
UmVwbGFjZToKICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBp
bkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwg
Ij4iKTsKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLAor
ICAgICAgICAgICAgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFRy
YW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICI8VHJhbnNpdGlvbjog
IiwgaW5Db250ZXh0KG9sZFN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAogICAgICAgICAg
ICAgcG9pbnRlckR1bXBJbkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBbIiwK
LSAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCksICJdLCBvZmZz
ZXQgPSAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX2NvbmRpdGlv
blNldCwgY29udGV4dCksICJdLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRU
eXBlKCksICI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXR0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMSBAQCBwdWJs
aWM6CiAgICAgUHV0QnlJZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKICAgICBQdXRC
eUlkVmFyaWFudCYgb3BlcmF0b3I9KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAKLSAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9m
ZnNldCk7CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJl
U2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwog
ICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAogICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCi0g
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZzZXQp
OworICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgc2V0dGVyKAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQcm9w
ZXJ0eU9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLApAQCAtOTksNiAr
OTksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CiAgICAgfQog
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHJlcXVpcmVkVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9yZXF1aXJlZFR5cGU7CisgICAgfQorCiAgICAgYm9vbCB3cml0
ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25z
dDsKICAgICBib29sIG1ha2VzQ2FsbHMoKSBjb25zdDsKQEAgLTEzMCw2ICsxMzUsNyBAQCBwcml2
YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CiAgICAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7
CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fcmVxdWlyZWRUeXBlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
TW9kZXMuaCIKLSNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIK
ICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgogI2luY2x1ZGUgIlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgiCkBAIC05OCwxMiArOTcsMTAgQEAgc3RydWN0IFVubGlua2VkSW5zdHJ1Y3Rp
b24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3BlcmFuZCA9IDA7IH0KICAgICBV
bmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1Lm9wY29kZSA9IG9wY29kZTsg
fQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQpIHsgdS5vcGVyYW5kID0gb3Bl
cmFuZDsgfQotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oUHV0QnlJZEZsYWdzIGZsYWdzKSB7IHUu
cHV0QnlJZEZsYWdzID0gZmxhZ3M7IH0KICAgICB1bmlvbiB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZTsKICAgICAgICAgaW50MzJfdCBvcGVyYW5kOwogICAgICAgICB1bnNpZ25lZCBpbmRleDsK
LSAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRGbGFnczsKICAgICB9IHU7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9u
IDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsMzkgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgdG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKICAgICB9Ci0gICAgCisKKyAgICAv
LyBOb3RlIHRoYXQgZm9yIGFueSB3YXRjaHBvaW50IHRoYXQgaXMgdmlzaWJsZSBmcm9tIHRoZSBE
RkcsIGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byB3cml0ZSBjb2RlIGxpa2U6CisgICAgLy8KKyAg
ICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQorICAg
IC8vCisgICAgLy8gQ29uY3VycmVudGx5IHRvIHRoaXMsIHRoZSBERkcgY291bGQgZG86CisgICAg
Ly8KKyAgICAvLyBpZiAody5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcGVyZm9ybSBvcHRp
bWl6YXRpb25zOworICAgIC8vIGlmICghdy5pc1N0aWxsVmFsaWQoKSkKKyAgICAvLyAgICAgcmV0
cnkgY29tcGlsYXRpb247CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgdGhlIERGRyBhbGdvcml0
aG0gaXMgd2lkZXNwcmVhZCwgYW5kIHNvdW5kLCBiZWNhdXNlIGZpcmVBbGwoKSBhbmQgaW52YWxp
ZGF0ZSgpIHdpbGwgbGVhdmUKKyAgICAvLyB0aGUgd2F0Y2hwb2ludCBpbiBhICFpc1N0aWxsVmFs
aWQoKSBzdGF0ZS4gSGVuY2UsIGlmIGZpcmVBbGwoKSBvciBpbnZhbGlkYXRlKCkgaW50ZXJsZWF2
ZWQgYmV0d2VlbgorICAgIC8vIHRoZSBmaXJzdCBpc1N0aWxsVmFsaWQoKSBjaGVjayBhbmQgdGhl
IHNlY29uZCBvbmUsIHRoZW4gaXQgd291bGQgc2ltcGx5IGNhdXNlIHRoZSBERkcgdG8gcmV0cnkK
KyAgICAvLyBjb21waWxhdGlvbiBsYXRlci4KKyAgICAvLworICAgIC8vIEJ1dCwgaWYgeW91IGNo
YW5nZSBzb21lIHBpZWNlIG9mIHN0YXRlIHRoYXQgdGhlIERGRyBtaWdodCBvcHRpbWl6ZSBmb3Is
IGJ1dCBpbnZhbGlkYXRlIHRoZQorICAgIC8vIHdhdGNocG9pbnQgYnkgZG9pbmc6CisgICAgLy8K
KyAgICAvLyBpZiAody5pc0JlaW5nV2F0Y2hlZCgpKQorICAgIC8vICAgICB3LmZpcmVBbGwoKQor
ICAgIC8vCisgICAgLy8gdGhlbiB0aGUgREZHIHdvdWxkIG5ldmVyIGtub3cgdGhhdCB5b3UgaW52
YWxpZGF0ZWQgc3RhdGUgYmV0d2VlbiB0aGUgdHdvIGNoZWNrcy4KKyAgICAvLworICAgIC8vIFRo
ZXJlIGFyZSB0d28gd2F5cyB0byB3b3JrIGFyb3VuZCB0aGlzOgorICAgIC8vCisgICAgLy8gLSBD
YWxsIGZpcmVBbGwoKSB3aXRob3V0IGEgaXNCZWluZ1dhdGNoZWQoKSBjaGVjay4gVGhlbiwgdGhl
IERGRyB3aWxsIGtub3cgdGhhdCB0aGUgd2F0Y2hwb2ludCBoYXMKKyAgICAvLyAgIGJlZW4gaW52
YWxpZGF0ZWQgd2hlbiBpdCBkb2VzIGl0cyBzZWNvbmQgY2hlY2suCisgICAgLy8KKyAgICAvLyAt
IERvIG5vdCBleHBvc2UgdGhlIHdhdGNocG9pbnQgc2V0IHRvIHRoZSBERkcgZGlyZWN0bHksIGFu
ZCBoYXZlIHlvdXIgb3duIHdheSBvZiB2YWxpZGF0aW5nIHdoZXRoZXIKKyAgICAvLyAgIHRoZSBh
c3N1bXB0aW9ucyB0aGF0IHRoZSBERkcgdGhyZWFkIHVzZWQgYXJlIHN0aWxsIHZhbGlkIHdoZW4g
dGhlIERGRyBjb2RlIGlzIGluc3RhbGxlZC4KICAgICBib29sIGlzQmVpbmdXYXRjaGVkKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGlmIChpc0ZhdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTE0LDcgKzIxMTQsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8v
IG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIHN0cnVjdHVy
ZSBjaGFpbgotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChQdXRCeUlkTm9uZSk7IC8vIGlzIG5v
dCBkaXJlY3QKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PihQdXRC
eUlkTm9uZSkpOyAvLyBpcyBub3QgZGlyZWN0CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0y
MTM2LDcgKzIxMzYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVj
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBvZmZzZXQKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoMCk7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7IC8vIHN0cnVjdHVyZSBjaGFpbiAodW51c2VkIGlmIGRpcmVjdCkKLSAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBw
cm9wZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJ
ZElzRGlyZWN0IDogUHV0QnlJZE5vbmUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0
aWNfY2FzdDxpbnQ+KChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJv
cGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJ
c0RpcmVjdCA6IFB1dEJ5SWROb25lKSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3Bl
Y05vbmUpCiAgICAgewotICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCk7
CisgICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0LCBhZG1pdHRlZFR5cGVz
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTEzOSw3ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSks
IHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJh
Y3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBh
ZG1pdHRlZFR5cGVzID0gU3BlY05vbmUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJy
YXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgyOSwxMCArMTgyOSwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1Y3R1
cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQorICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKQogICAgICAgICAgICAgJiYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSkpIHsKLSAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgbV9n
cmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOworICAgICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOworICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQpOwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
RmlndXJlIG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBUT1AsIGEg
Y29uc3RhbnQsIG9yIG1heWJlCiAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3Vi
dGxlPwpAQCAtMTg0MSwyMiArMTg0MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgdGhpbmcgd29uJ3QgZ2l2
ZSB1cyBhIHZhcmlhbnQgdGhhdCBpbnZvbHZlcyBwcm90b3R5cGVzLiBJZiBpdCBkaWQsIHdlJ2QK
ICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaGVyZS4KICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBzdGF0dXNbaV0uY29uZGl0
aW9uU2V0KCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZlcnJlZFZhbHVlRm9y
UHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHVpZCwgc3RhdHVz
W2ldLm9mZnNldCgpLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAx
IHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IHJl
c3VsdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE4ODAsNyAr
MTg3MCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFk
eSBlbnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1
Y3R1cmVTZXQoKTsKICAgICAgICAgCkBAIC0xODg4LDEyICsxODc3LDI0IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0
aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1
Y3R1cmUgY2hlY2sKICAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24n
dC4KICAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lOworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
IGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25l
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAg
ICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY090aGVyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBm
aWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAgIAorICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCwg
YWRtaXR0ZWRUeXBlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMDg0
LDEzICsyMDg1LDI5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlQWNjZXNz
RGF0YSYgZGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpLCBkYXRhLm9mZnNldCk7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VI
ZWFwVG9wKCk7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50
aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXTsKKworICAgICAgICAvLyBGSVhNRTogVGhl
IHBhcnQgb2YgdGhpcyB0aGF0IGhhbmRsZXMgaW5mZXJyZWQgcHJvcGVydHkgdHlwZXMgcmVsaWVz
IG9uIEFJIGtub3dpbmcgdGhlIHN0cnVjdHVyZQorICAgICAgICAvLyByaWdodCBub3cuIFRoYXQn
cyBwcm9iYWJseSBub3Qgb3B0aW1hbC4gSW4gc29tZSBjYXNlcywgd2UgbWF5IHBlcmZvcm0gYW4g
b3B0aW1pemF0aW9uICh1c3VhbGx5CisgICAgICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFu
IEFJLCBtYXliZSBieSBDU0UgZm9yIGV4YW1wbGUpIHRoYXQgb2JzY3VyZXMgQUkncyB2aWV3IG9m
IHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gYXQgdGhlIHBvaW50IHdoZXJlIEdldEJ5T2Zmc2V0
IHJ1bnMuIEN1cnJlbnRseSwgd2hlbiB0aGF0IGhhcHBlbnMsIHdlJ2xsIGhhdmUgdG8gcmVseSBl
bnRpcmVseQorICAgICAgICAvLyBvbiB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIHdhcyBh
YmxlIHRvIHByb3ZlLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9ncmFwaC5pbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KSwgdWlkLCBkYXRhLm9mZnNldCwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisK
KyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJz
ZXIgY2FtZSB1cCB3aXRoIGlzIGJldHRlci4KKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlRnJv
bVBhcnNpbmc7CisgICAgICAgIHR5cGVGcm9tUGFyc2luZy5zZXQobV9ncmFwaCwgZGF0YS5pbmZl
cnJlZFR5cGUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZUZyb21QYXJzaW5nKTsKKworICAgICAgICAvLyBJZiB3ZSBkZWNpZGUgdGhh
dCB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbnkgdmFsdWUgdGhhdCB0aGlzIGNhbiByZXR1cm4sIHRo
ZW4gaXQncyBwcm9iYWJseQorICAgICAgICAvLyBiZWNhdXNlIHRoZSBjb21waWxhdGlvbiB3YXMg
YWxyZWFkeSBpbnZhbGlkYXRlZC4KKyAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAg
ICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisKKyAgICAgICAgZm9yTm9kZShub2Rl
KSA9IHZhbHVlOworICAgICAgICBpZiAodmFsdWUubV92YWx1ZSkKKyAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC0yMTIwLDYgKzIxMzcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGVmZmVjdCBvbiBjb21waWxlIHRp
bWVzLCBidXQgdGhpcyBub2RlIGlzIEZUTC1vbmx5LgogICAgICAgICBtX3N0YXRlLnNldEZvdW5k
Q29uc3RhbnRzKHRydWUpOwogICAgICAgICAKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlk
ZW50aWZpZXJOdW1iZXJdOworCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKICAgICAgICAg
QWJzdHJhY3RWYWx1ZSByZXN1bHQ7CkBAIC0yMTI5LDE4ICsyMTQ4LDI5IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJn
ZShzZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZ2V0Q2FzZS5tZXRob2QoKS5r
aW5kKCkgIT0gR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0Q2FzZS5tZXRob2QoKS5raW5kKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OiB7CisgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSB0aGlzUmVzdWx0OworICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgICAgICAgICAqZ2V0Q2FzZS5t
ZXRob2QoKS5jb25zdGFudCgpLAorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3Vs
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAgICAgIHRoaXNS
ZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKmdl
dENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0
KTsKKworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDogeworICAgICAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIHVpZCwg
bV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBiYXNlU2V0KSA9PSBDb250cmFkaWN0
aW9uKQpAQCAtMjE2Myw2ICsyMTkzLDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAg
ICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdGluZ1ZhbHVlOwogICAgICAg
ICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
QEAgLTIxNzAsNiArMjIwMiwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICB0aGlzU2V0LmZpbHRlcihiYXNlKTsKICAgICAgICAgICAgIGlm
ICh0aGlzU2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworICAgICAgICAg
ICAgdGhpc1ZhbHVlLmZpbHRlcihtX2dyYXBoLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKKyAg
ICAgICAgICAgIHJlc3VsdGluZ1ZhbHVlLm1lcmdlKHRoaXNWYWx1ZSk7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikgewogICAgICAgICAgICAgICAgIGlmICh0aGlzU2V0Lm9ubHlTdHJ1Y3R1cmUoKSAhPSB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25z
LmFwcGVuZCgKQEAgLTIxODUsNiArMjIyMiw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1pdCwg
dHJhbnNpdGlvbnMpOwogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuY2hhbmdl
U3RydWN0dXJlKG1fZ3JhcGgsIG5ld1NldCkgPT0gQ29udHJhZGljdGlvbikKICAgICAgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpID0gcmVzdWx0aW5nVmFsdWU7CisgICAgICAgIGlmICghIW9yaWdpbmFsVmFsdWUgJiYgIXJl
c3VsdGluZ1ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIyNjQsMTMgKzIzMDQsMTMgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZs
dXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3Ry
dWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpIHsKKyAg
ICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKICAgICAgICAgICAgIFB1
dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAog
ICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLAogICAgICAgICAgICAgICAg
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAg
ICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlU2V0IG5ld1NldDsKICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVmVjdG9yIHRyYW5z
aXRpb25zOwpAQCAtMjYxNSw5ICsyNjU1LDkgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZp
bHRlcigKLSAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQp
CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTcGVj
dWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQogewotICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFw
aCwgc2V0KSA9PSBGaWx0cmF0aW9uT0spCisgICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBoLCBz
ZXQsIGFkbWl0dGVkVHlwZXMpID09IEZpbHRyYXRpb25PSykKICAgICAgICAgcmV0dXJuIEZpbHRy
YXRpb25PSzsKICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgIHJldHVybiBDb250
cmFkaWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDU2
IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0VHlwZShHcmFwaCYgZ3JhcGgKICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiB9CiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHN3aXRj
aCAoZGVzY3JpcHRvci5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgor
ICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvb2xlYW46CisgICAgICAgIHNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBzZXRUeXBlKFNwZWNPdGhl
cik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAg
ICAgIHNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIHNldFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIHNl
dChncmFwaCwgZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAg
IHNldChncmFwaCwgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1lcmdlKFNwZWNP
dGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0Ogor
ICAgICAgICBzZXRUeXBlKGdyYXBoLCBTcGVjT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBzZXRUeXBlKGdyYXBo
LCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG1ha2VIZWFwVG9wKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldCgKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKK3sKKyAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3IpOworICAgIGlmIChjbG9iYmVyU3RhdGUg
PT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsK
K30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgm
IGdyYXBoLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KHJlcHJlc2VudGF0aW9uID09IE5vZGVSZXN1bHREb3VibGUpIHsKQEAgLTE4OSw4ICsyMzksMjIg
QEAgYm9vbCBBYnN0cmFjdFZhbHVlOjptZXJnZU9TUkVudHJ5VmFsdWUoRwogICAgIHJldHVybiBv
bGRNZSAhPSAqdGhpczsKIH0KIAotRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorYm9vbCBBYnN0cmFj
dFZhbHVlOjppc1R5cGUoR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGluZmVycmVkVHlwZSkgY29uc3QKIHsKKyAgICBBYnN0cmFjdFZhbHVlIHR5cGVWYWx1ZTsK
KyAgICB0eXBlVmFsdWUuc2V0KGdyYXBoLCBpbmZlcnJlZFR5cGUpOworCisgICAgQWJzdHJhY3RW
YWx1ZSBtZXJnZWRWYWx1ZSA9ICp0aGlzOworICAgIG1lcmdlZFZhbHVlLm1lcmdlKHR5cGVWYWx1
ZSk7CisKKyAgICByZXR1cm4gbWVyZ2VkVmFsdWUgPT0gdHlwZVZhbHVlOworfQorCitGaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcigKKyAgICBHcmFwaCYgZ3JhcGgsIGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCit7Cisg
ICAgQVNTRVJUKCEoYWRtaXR0ZWRUeXBlcyAmIFNwZWNDZWxsKSk7CisgICAgCiAgICAgaWYgKGlz
Q2xlYXIoKSkKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKICAgICAKQEAgLTE5OCw3ICsy
NjIsNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgLy8g
aGF2aW5nIHN0cnVjdHVyZXMsIGFycmF5IG1vZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjMKICAgICAK
LSAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOworICAgIG1f
dHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgfCBhZG1pdHRlZFR5cGVz
OwogICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsK
ICAgICBtX3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgIApAQCAtMzE1LDYgKzM3OSwxMyBA
QCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihjCiAgICAgcmV0dXJuIENv
bnRyYWRpY3Rpb247CiB9CiAKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEFic3RyYWN0VmFsdWUgZmlsdGVyVmFsdWU7CisgICAgZmlsdGVyVmFsdWUuc2V0
KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICByZXR1cm4gZmlsdGVyKGZpbHRlclZhbHVlKTsKK30K
Kwogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8gV2Ug
Y291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZSBjb250cmF2ZW5lcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNw
ZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKQEAgLTIxNCw3ICsyMTUs
MTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgp
OwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBz
ZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKyAgICB2b2lkIHNl
dChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSk7CisKICAgICB2b2lkIGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5v
ZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogPSBudWxscHRyKTsKICAgICB2b2lkIGZpeFR5
cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYsIE5vZGUqKTsKICAgICAKQEAgLTI4MCwxNyArMjg0
LDI3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiAhKG1f
dHlwZSAmIH5kZXNpcmVkVHlwZSk7CiAgICAgfQorCisgICAgYm9vbCBpc1R5cGUoR3JhcGgmLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKSBjb25zdDsKKworICAgIC8vIEZpbHRlcnMg
dGhlIHZhbHVlIHVzaW5nIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBJZiB0aGUgYWRtaXR0ZWRU
eXBlcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkLCB0aGlzCisgICAgLy8gaW1wbGljaXRseSBmaWx0
ZXJzIGJ5IHRoZSB0eXBlcyBpbXBsaWVkIGJ5IHRoZSBzdHJ1Y3R1cmUgc2V0LCB3aGljaCBhcmUg
dXN1YWxseSBhIHN1YnNldCBvZgorICAgIC8vIFNwZWNDZWxsLiBIZW5jZSwgYWZ0ZXIgdGhpcyBj
YWxsLCB0aGUgdmFsdWUgd2lsbCBubyBsb25nZXIgaGF2ZSBhbnkgbm9uLWNlbGwgbWVtYmVycy4g
QnV0LCB5b3UgY2FuCisgICAgLy8gdXNlIGFkbWl0dGVkVHlwZXMgdG8gcHJlc2VydmUgc29tZSBu
b24tY2VsbCB0eXBlcy4gTm90ZSB0aGF0IGl0J3Mgd3JvbmcgZm9yIGFkbWl0dGVkVHlwZXMgdG8g
b3ZlcmxhcAorICAgIC8vIHdpdGggU3BlY0NlbGwuCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0
ZXIoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5
cGVzID0gU3BlY05vbmUpOwogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBo
JiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJh
eU1vZGVzKEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1bGF0
ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVu
VmFsdWUmIHZhbHVlKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihjb25zdCBBYnN0cmFj
dFZhbHVlJik7CisKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIEZpbHRyYXRpb25SZXN1bHQgY2hh
bmdlU3RydWN0dXJlKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgYm9v
bCBjb250YWlucyhTdHJ1Y3R1cmUqKSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wgdmFsaWRhdGUo
SlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDkgKzIwNiw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQs
IEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVuY3Rvcj4KICAgICBib29s
IGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJu
YWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNl
cnRDaGVja3MpOwotICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAgTm9kZSog
aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsK
LSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNl
dCk7CisgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllciwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYs
IE5vZGUqIHZhbHVlKTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQp
OwogCiAgICAgLy8gQ3JlYXRlIGEgcHJlc2VuY2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gYmFz
ZWQgb24gc29tZSBrbm93biBvZmZzZXQgYW5kIHN0cnVjdHVyZSBzZXQuIERvZXMgbm90CiAgICAg
Ly8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25kaXRpb24sIGJ1dCBpdCBtYXkgcmV0dXJu
IGEgbnVsbCBvbmUgaWYgaXQgZW5jb3VudGVycyBhIGNvbnRyYWRpY3Rpb24uCkBAIC0yMzA3LDcg
KzIzMDYsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJl
ZFR5cGUsIE5vZGVUeXBlIG9wKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMTgsMTMgKzIzMTksMTcgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9m
ZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51
bWJlcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CisgICAgbV9ncmFw
aC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpOwogICAgIAogICAgIE5vZGUqIGdl
dEJ5T2Zmc2V0ID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlv
biksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CiAKICAgICByZXR1cm4gZ2V0QnlPZmZzZXQ7CiB9
CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGUqIHZhbHVlKQor
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAorICAgIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUsCisgICAgTm9kZSogdmFsdWUpCiB7CiAg
ICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQp
KQpAQCAtMjMzNSw2ICsyMzQwLDggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
T2Zmc2V0KAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPm9mZnNldCA9IG9mZnNldDsKICAgICBkYXRhLT5p
ZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllcjsKKyAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSBp
bmZlcnJlZFR5cGU7CisgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShpbmZlcnJlZFR5
cGUpOwogICAgIAogICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9w
SW5mbyhkYXRhKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDQ5
LDcgKzI0NTYsOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgcmV0dXJu
IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5jb25zdGFudCgpKSk7CiAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKICAgICAgICAgTm9k
ZSogYmFzZU5vZGUgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QucHJvdG90
eXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJh
c2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIG9wKTsKKyAgICAgICAg
cmV0dXJuIGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZU5v
ZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgSW5mZXJyZWRUeXBlOjpUb3As
IG9wKTsKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKICAgICAgICAg
Ly8gV2lsbCBuZXZlciBzZWUgdGhpcyBmcm9tIHBsYW5Mb2FkKCkuCkBAIC0yNTU1LDEzICsyNTYz
LDEzIEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgIAogICAgIGJvb2wgbmVlZFN0
cnVjdHVyZUNoZWNrID0gdHJ1ZTsKICAgICAKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworICAgIAogICAgIGlmIChK
U09iamVjdCoga25vd25CYXNlID0gYmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU09iamVjdCo+
KCkpIHsKICAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIGF3YXkgdGhlIHN0cnVjdHVyZSBjaGVj
ay4gTm90ZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGRvaW5nIGFueXRoaW5nIGFib3V0IHRoaXMKICAg
ICAgICAgLy8gaWYgdGhlIGJhc2UncyBzdHJ1Y3R1cmUgaXMgd2F0Y2hlZC4KICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5jb25zdGFudCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpIHsKLSAgICAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJl
cl07Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghdmFyaWFudC5jb25kaXRpb25TZXQo
KS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUg
bG9hZGluZyBmcm9tIGEgcHJvdG90eXBlLiBXZSBleHBlY3QgdGhlIGJhc2Ugbm90IHRvIGhhdmUg
dGhlCiAgICAgICAgICAgICAgICAgLy8gcHJvcGVydHkuIFdlIGNhbiBvbmx5IHVzZSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBpZiBhbGwgb2YgdGhlIHN0cnVjdHVyZXMgaW4gdGhlCkBAIC0yNjI2
LDkgKzI2MzQsMTggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgICAgICBp
ZiAoY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0
YW50KTsKICAgICAgICAgfQorCisgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZl
cnJlZFR5cGU7CisgICAgICAgIGlmIChuZWVkU3RydWN0dXJlQ2hlY2spIHsKKyAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHRoaXNUeXBlID0gbV9ncmFw
aC5pbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCk7CisgICAgICAgICAgICAg
ICAgaW5mZXJyZWRUeXBlLm1lcmdlKHRoaXNUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAg
ICAgICAgCiAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
ICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZz
ZXQoKSwgbG9hZE9wKTsKKyAgICAgICAgICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBpbmZlcnJlZFR5cGUsIGxvYWRPcCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGxvYWRlZFZhbHVlOwpAQCAtMjYzOSw3ICsyNjU2LDcgQEAgTm9kZSog
Qnl0ZUNvZGVQYXJzZXI6OnN0b3JlKE5vZGUqIGJhc2UsIAogICAgIFJFTEVBU0VfQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKTsKIAogICAgIGNoZWNrUHJl
c2VuY2VMaWtlKGJhc2UsIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyXSwgdmFyaWFu
dC5vZmZzZXQoKSwgdmFyaWFudC5zdHJ1Y3R1cmUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZVB1dEJ5
T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQo
KSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSwgdmFsdWUpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVHZXRCeUlkKApAQCAtMjc5OCw2ICsyODE1LDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CisKKyAgICAgICAgZm9yIChjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA6IHB1dEJ5SWRTdGF0dXMudmFyaWFudHMoKSkKKyAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0
ZXJJbmZlcnJlZFR5cGUodmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CiAgICAgICAgIAogICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CkBAIC0yODU0LDYgKzI4NzQsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0gdmFyaWFudC5vZmZz
ZXQoKTsKICAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7
CisgICAgICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IHZhcmlhbnQucmVxdWlyZWRUeXBlKCk7Cisg
ICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoZGF0YS0+aW5mZXJyZWRUeXBlKTsK
ICAgICAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBQdXRCeU9mZnNldCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0
U3RhdGUuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBA
QCBib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kCiAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlQWN0aXZhdGlvbjoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlv
bjoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgorICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAvLyBU
aGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJ
dCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKICAgICAgICAgLy8gaGVhcHMgaW50byB0aG9z
ZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0
IGRvIHRoYXQgcmlnaHQgbm93LgogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4
OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgpAQCAtMzczLDcgKzM3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLm9ubHlTdHJ1Y3R1cmUoKSA9
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9m
ZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQucmVxdWlyZWRUeXBl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00NDgsNiArNDUwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNl
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2VW
YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKIAogICAg
ICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNo
IENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAg
ICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZh
dWx0IGNvbnN0YW50IGZvbGRlciB0byBkbyB0aGluZ3MgdG8gdGhpcy4KQEAgLTQ2Myw3ICs0NjYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3Rh
dHVzLmlzU2ltcGxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5udW1WYXJpYW50cygpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkg
PiAxICYmICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKQEAgLTY0MCw3ICs2NDMsOSBAQCBw
cml2YXRlOgogICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBjaGls
ZEVkZ2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5v
ZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCisgICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQoCisgICAgICAgIHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsCisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcCkKICAg
ICB7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
IApAQCAtNjU2LDYgKzY2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRh
JiBkYXRhID0gKm1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICAgICAgZGF0
YS5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50
aWZpZXJOdW1iZXI7CisgICAgICAgIGRhdGEuaW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOwog
ICAgICAgICAKICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQoZGF0YSwgcHJvcGVy
dHlTdG9yYWdlKTsKICAgICB9CkBAIC02NjQsOCArNjcwLDEwIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKICAgICAgICAgRWRnZSBj
aGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgCisKICAgICAgICAgYWRkQmFzZUNo
ZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KTsKKyAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldCwgaW5kZXhJbkJsb2NrLCBvcmlnaW4sIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgdmFy
aWFudC5yZXF1aXJlZFR5cGUoKSk7CiAKICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChLbm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOwpAQCAtNzMwLDYgKzczOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBBcmlzZXMg
d2hlbiB3ZSBwcnVuZSBNdWx0aUdldEJ5T2Zmc2V0LiBXZSBjb3VsZCBoYXZlIGEKICAgICAgICAg
ICAgIC8vIE11bHRpR2V0QnlPZmZzZXQgd2l0aCBhIHNpbmdsZSB2YXJpYW50IHRoYXQgY2hlY2tz
IGZvciBzdHJ1Y3R1cmUgUywKICAgICAgICAgICAgIC8vIGFuZCB0aGUgaW5wdXQgaGFzIHN0cnVj
dHVyZXMgUyBhbmQgVCwgZm9yIGV4YW1wbGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgbm9kZS0+b3Jp
Z2luLAogICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzZXQp
KSwgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorI2RlZmluZSBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSW5m
ZXJyZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGRvY3VtZW50cyB0aGUgREZHJ3MgZXhwZWN0YXRp
b24gZm9yIGFuIEluZmVycmVkVHlwZTogc3BlY2lmaWNhbGx5LCB0aGF0IHdlIHdhbnQgaXQgdG8g
aGF2ZSBhIGxpdmUKKy8vIEluZmVycmVkVHlwZSBvYmplY3QgYW5kIHRoYXQgdGhpcyBvYmplY3Qg
aGFzIHRoZSB0eXBlIHRoYXQgd2Ugb3JpZ2luYWxseSBzYXcuCisKK2NsYXNzIERlc2lyZWRJbmZl
cnJlZFR5cGUgeworcHVibGljOgorICAgIERlc2lyZWRJbmZlcnJlZFR5cGUoKQorICAgICAgICA6
IG1fb2JqZWN0KG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBEZXNpcmVkSW5mZXJy
ZWRUeXBlKEluZmVycmVkVHlwZSogb2JqZWN0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3ImIGV4cGVjdGVkKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX2V4
cGVjdGVkKGV4cGVjdGVkKQorICAgIHsKKyAgICB9CisKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBl
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX29iamVjdChudWxs
cHRyKQorICAgICAgICAsIG1fZXhwZWN0ZWQoSW5mZXJyZWRUeXBlOjpUb3ApCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX29iamVj
dCAmJiBtX2V4cGVjdGVkOyB9CisKKyAgICBJbmZlcnJlZFR5cGUqIG9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0OyB9CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGV4cGVjdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9leHBlY3RlZDsgfQorCisgICAgYm9vbCBpc1N0aWxsVmFsaWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5jYW5XYXRjaChtX2V4cGVj
dGVkKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25z
dAorICAgIHsKKyAgICAgICAgbV9vYmplY3QtPmFkZFdhdGNocG9pbnQod2F0Y2hwb2ludCk7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0ID09IG90aGVyLm1fb2Jq
ZWN0CisgICAgICAgICAgICAmJiBtX2V4cGVjdGVkID09IG90aGVyLm1fZXhwZWN0ZWQ7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX29iamVjdCAmJiBtX2V4cGVjdGVkID09IEluZmVycmVkVHlwZTo6VG9wOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURjo6UHRySGFzaDxJbmZlcnJlZFR5cGUqPjo6aGFzaChtX29iamVjdCkgKyBtX2V4cGVjdGVk
Lmhhc2goKSAqIDc7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnBy
aW50KGluQ29udGV4dChtX2V4cGVjdGVkLCBjb250ZXh0KSwgIiBmb3IgIiwgUmF3UG9pbnRlciht
X29iamVjdCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUqIG1fb2JqZWN0OworICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBtX2V4cGVjdGVkOworfTsKKworc3RydWN0IERlc2lyZWRJbmZlcnJlZFR5cGVI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBhLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RGVzaXJlZEluZmVy
cmVkVHlwZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGVIYXNo
IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3Rl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiB7
IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNp
b24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQCB2b2lkIEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6CiAgICAgfQogfQogCit2b2lkIEluZmVycmVkVHlw
ZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYga2V5LCBDb21tb25EYXRhJiBjb21tb24pCit7CisgICAga2V5LmFkZChjb21tb24ud2F0
Y2hwb2ludHMuYWRkKGNvZGVCbG9jaykpOworfQorCiBEZXNpcmVkV2F0Y2hwb2ludHM6OkRlc2ly
ZWRXYXRjaHBvaW50cygpIHsgfQogRGVzaXJlZFdhdGNocG9pbnRzOjp+RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CiAKQEAgLTkzLDYgKzk4LDExIEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjph
ZGRMYXppbHkoY29uc3QKICAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hZGRMYXppbHkoa2V5
KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJiBrZXkpCit7CisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZExhemlseShrZXkp
OworfQorCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xMDgs
NiArMTE4LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogICAg
IG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAg
bV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAg
ICBtX2luZmVycmVkVHlwZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAK
IGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKQEAgLTExNiw3
ICsxMjcsOCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpCiAgICAg
ICAgICYmIG1faW5saW5lU2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9pbmZlcnJl
ZFZhbHVlcy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGls
bFZhbGlkKCkKLSAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxp
ZCgpOworICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlkKCkK
KyAgICAgICAgJiYgbV9pbmZlcnJlZFR5cGVzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAogdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0CkBAIC0xMjcsNiArMTM5LDcgQEAgdm9pZCBEZXNpcmVkV2F0
Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUAogICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHZh
bHVlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRWYWx1ZXMsIGNvbnRleHQpLCAiXG4iKTsKICAg
ICBvdXQucHJpbnQoIiAgICBCdWZmZXIgdmlld3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdz
LCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgT2JqZWN0IHByb3BlcnR5IGNv
bmRpdGlvbnM6ICIsIGluQ29udGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCks
ICJcbiIpOworICAgIG91dC5wcmludCgiICAgIEluZmVycmVkIHR5cGVzOiAiLCBpbkNvbnRleHQo
bV9pbmZlcnJlZFR5cGVzLCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRh
dGEuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSW5m
ZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uaCIKQEAgLTkxLDYgKzkyLDE4IEBAIHN0cnVjdCBBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG8KICAgICB9CiB9OwogCitzdHJ1Y3QgSW5mZXJy
ZWRUeXBlQWRhcHRvciB7CisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IERl
c2lyZWRJbmZlcnJlZFR5cGUmLCBDb21tb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wgaGFzQmVl
bkludmFsaWRhdGVkKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAha2V5LmlzU3RpbGxWYWxpZCgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUm
IGtleSwgRHVtcENvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5D
b250ZXh0KGtleSwgY29udGV4dCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFdh
dGNocG9pbnRTZXRUeXBlLCB0eXBlbmFtZSBBZGFwdG9yID0gU2V0UG9pbnRlckFkYXB0b3I8V2F0
Y2hwb2ludFNldFR5cGU+PgogY2xhc3MgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50cyB7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRApAQCAtMTU5LDYgKzE3MiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQn
cyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFw
aDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1aXJlZCBHQyBt
YWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9pZCBhZGRMYXpp
bHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIC8vIEl0J3MgcmVjb21t
ZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OmluZmVy
cmVkVHlwZUZvcigpLCB3aGljaCBkb2VzCisgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1hZ2ljLgor
ICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmKTsKICAgICAKICAg
ICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIApAQCAtMTg2LDYgKzIwMywxMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuaXNX
YXRjaGVkKGtleSk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKGNvbnN0IERlc2lyZWRJbmZl
cnJlZFR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZmVycmVkVHlwZXMuaXNX
YXRjaGVkKGtleSk7CisgICAgfQogCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKQEAgLTE5Niw2ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5mZXJyZWRWYWx1ZSosIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFs
dWVzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBB
cnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5l
cmljRGVzaXJlZFdhdGNocG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBH
ZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPERlc2lyZWRJbmZlcnJlZFR5cGUsIEluZmVycmVkVHlw
ZUFkYXB0b3I+IG1faW5mZXJyZWRUeXBlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luZmVy
cmVkVHlwZUNoZWNrLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAi
REZHUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpA
QCAtMTA5Miw2ICsxMDkzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPEtub3du
Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNr
KAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4SW5CbG9jaywgbm9kZS0+
b3JpZ2luLCBub2RlLT5jaGlsZDMoKS5ub2RlKCksCisgICAgICAgICAgICAgICAgbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGEoKS5pbmZlcnJlZFR5cGUpOwogICAgICAgICAgICAgc3BlY3VsYXRlRm9y
QmFycmllcihub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4OTky
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjEsMTIgKzI2MSwxNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9
IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlk
Iiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlmaWVycygp
W3N0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOwogICAgICAgICBvdXQu
cHJpbnQoIiwgIiwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQpKTsKKyAgICAgICAgb3V0LnByaW50KCIsIGluZmVycmVkVHlwZSA9ICIsIGluQ29udGV4dChz
dG9yYWdlQWNjZXNzRGF0YS5pbmZlcnJlZFR5cGUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYg
KG5vZGUtPmhhc011bHRpR2V0QnlPZmZzZXREYXRhKCkpIHsKICAgICAgICAgTXVsdGlHZXRCeU9m
ZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJpZCIsIGRhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlm
aWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS5jYXNlc1tpXSwgY29udGV4dCkpOworICAgICAg
ICAgICAgaWYgKGRhdGEuY2FzZXNbaV0ubWV0aG9kKCkua2luZCgpID09IEdldEJ5T2Zmc2V0TWV0
aG9kOjpMb2FkKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiIChpbmZlcnJlZCB2YWx1ZSA9
ICIsIGluQ29udGV4dChpbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoZGF0YS5jYXNlc1tpXS5zZXQo
KSwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdKSwgY29udGV4dCksICIpIik7
CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc011bHRpUHV0QnlPZmZzZXREYXRh
KCkpIHsKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpOwpAQCAtODg3LDYgKzg5MSwzOCBAQCBib29sIEdyYXBoOjppc1NhZmVU
b0xvYWQoSlNPYmplY3QqIGJhc2UsCiAgICAgcmV0dXJuIG1fc2FmZVRvTG9hZC5jb250YWlucyhz
dGQ6Om1ha2VfcGFpcihiYXNlLCBvZmZzZXQpKTsKIH0KIAorSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpCit7
CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGtleS5zdHJ1Y3R1cmUoKSk7CisgICAgCisgICAgYXV0
byBpdGVyID0gbV9pbmZlcnJlZFR5cGVzLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtX2lu
ZmVycmVkVHlwZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIElu
ZmVycmVkVHlwZSogdHlwZU9iamVjdCA9IGtleS5zdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9y
KGtleS51aWQoKSk7CisgICAgaWYgKCF0eXBlT2JqZWN0KSB7CisgICAgICAgIG1faW5mZXJyZWRU
eXBlcy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJl
ZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdHlwZURl
c2NyaXB0b3IgPSB0eXBlT2JqZWN0LT5kZXNjcmlwdG9yKCk7CisgICAgaWYgKHR5cGVEZXNjcmlw
dG9yLmtpbmQoKSA9PSBJbmZlcnJlZFR5cGU6OlRvcCkgeworICAgICAgICBtX2luZmVycmVkVHlw
ZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRU
eXBlOjpUb3A7CisgICAgfQorICAgIAorICAgIG1faW5mZXJyZWRUeXBlcy5hZGQoa2V5LCB0eXBl
RGVzY3JpcHRvcik7CisKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHR5cGVP
YmplY3QpOworICAgIHJlZ2lzdGVySW5mZXJyZWRUeXBlKHR5cGVEZXNjcmlwdG9yKTsKKworICAg
IC8vIE5vdGUgdGhhdCB3ZSBtYXkgYWxyZWFkeSBiZSB3YXRjaGluZyB0aGlzIGRlc2lyZWQgaW5m
ZXJyZWQgdHlwZSwgYmVjYXVzZSBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG1heQorICAgIC8vIHBvaW50
IHRvIHRoZSBzYW1lIEluZmVycmVkVHlwZSBpbnN0YW5jZS4KKyAgICBtX3BsYW4ud2F0Y2hwb2lu
dHMuYWRkTGF6aWx5KERlc2lyZWRJbmZlcnJlZFR5cGUodHlwZU9iamVjdCwgdHlwZURlc2NyaXB0
b3IpKTsKKworICAgIHJldHVybiB0eXBlRGVzY3JpcHRvcjsKK30KKwogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBI
YXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+
OjppdGVyYXRvciBpdGVyID0gbV9ieXRlY29kZUxpdmVuZXNzLmZpbmQoY29kZUJsb2NrKTsKQEAg
LTEwNjEsNyArMTA5Nyw3IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHko
SlMKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoCiAgICAgSlNWYWx1ZSBi
YXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVG9wKCkgfHwgc3RydWN0dXJlLmlz
Q2xvYmJlcmVkKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLmlzSW5maW5pdGUoKSkgewogICAgICAg
ICAvLyBGSVhNRTogSWYgd2UganVzdCBjb252ZXJ0ZWQgdGhlIG9mZnNldCB0byBhIHVpZCwgd2Ug
Y291bGQgZG8gT2JqZWN0UHJvcGVydHlDb25kaXRpb24KICAgICAgICAgLy8gd2F0Y2hpbmcgdG8g
Y29uc3RhbnQtZm9sZCB0aGUgcHJvcGVydHkuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcyNzEKQEAgLTEwNzYsNiArMTExMiwzNyBAQCBKU1Zh
bHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KGNvCiAgICAgcmV0dXJuIHRyeUdldENv
bnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOwog
fQogCitBYnN0cmFjdFZhbHVlIEdyYXBoOjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAg
Y29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0
OworICAgIGJhc2UuZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
eworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlLnNl
dCgqdGhpcywgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSh2YWx1ZSk7CisgICAgICAgIH0pOworICAgIGlmIChjbG9iYmVy
U3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2JiZXJlZCkKKyAgICAgICAgcmVzdWx0LmNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQWJzdHJhY3RWYWx1ZSBHcmFw
aDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQoreworICAgIGlmIChKU1ZhbHVlIHZh
bHVlID0gdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBvZmZzZXQpKSB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQuc2V0KCp0aGlzLCAqZnJlZXplKHZh
bHVlKSwgY2xvYmJlclN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBpZiAoYmFzZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKQorICAgICAgICByZXR1cm4gaW5mZXJy
ZWRWYWx1ZUZvclByb3BlcnR5KGJhc2UubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCwgY2xvYmJlclN0
YXRlKTsKKworICAgIHJldHVybiBBYnN0cmFjdFZhbHVlOjpoZWFwVG9wKCk7Cit9CisKIEpTVmFs
dWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcihKU1ZhbHVlIGJhc2UsIFNjb3BlT2Zm
c2V0IG9mZnNldCkKIHsKICAgICAvLyBUaGlzIGhhcyBhbiBhd2Vzb21lIGNvbmN1cnJlbmN5IHN0
b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyIGluIEJ5dGVDb2RlUGFyc2VyLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg5OTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRG
R1BsYW4uaCIKICNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCisjaW5jbHVkZSAiREZH
UHJvcGVydHlUeXBlS2V5LmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAi
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCkBAIC02NzUsNiAr
Njc2LDI3IEBAIHB1YmxpYzoKICAgICAvLyBDaGVja3MgaWYgaXQncyBrbm93biB0aGF0IGxvYWRp
bmcgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgZmluZS4gVGhp
cyBpcwogICAgIC8vIGNvbXB1dGVkIGJ5IHRyYWNraW5nIHdoaWNoIGNvbmRpdGlvbnMgd2UgdHJh
Y2sgd2l0aCB3YXRjaENvbmRpdGlvbigpLgogICAgIGJvb2wgaXNTYWZlVG9Mb2FkKEpTT2JqZWN0
KiBiYXNlLCBQcm9wZXJ0eU9mZnNldCk7CisKKyAgICB2b2lkIHJlZ2lzdGVySW5mZXJyZWRUeXBl
KGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlLnN0cnVjdHVyZSgpKQorICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUodHlwZS5z
dHJ1Y3R1cmUoKSk7CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgd2hhdCBpbmZlcnJlZCB0eXBl
IHdlIGFyZSBhYmxlIHRvIHByb3ZlIHRoZSBwcm9wZXJ0eSB0byBoYXZlIG5vdyBhbmQgaW4gdGhl
IGZ1dHVyZS4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yKGNv
bnN0IFByb3BlcnR5VHlwZUtleSYpOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZl
cnJlZFR5cGVGb3JQcm9wZXJ0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFR5cGVGb3IoUHJvcGVydHlU
eXBlS2V5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgfQorCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZl
cnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJl
c0FyZVdhdGNoZWQpOworCisgICAgLy8gVGhpcyB1c2VzIGVpdGhlciBjb25zdGFudCBwcm9wZXJ0
eSBpbmZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2UgdG8gZGVyaXZlIGEgZ29vZCBh
YnN0cmFjdAorICAgIC8vIHZhbHVlIGZvciBzb21lIHByb3BlcnR5IGFjY2Vzc2VkIHdpdGggdGhl
IGdpdmVuIGFic3RyYWN0IHZhbHVlIGJhc2UuCisgICAgQWJzdHJhY3RWYWx1ZSBpbmZlcnJlZFZh
bHVlRm9yUHJvcGVydHkoCisgICAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWUmIGJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUp
OwogICAgIAogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihDb2RlQmxvY2sq
KTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoSW5saW5lQ2FsbEZyYW1l
Kik7CkBAIC04NTYsNiArODc4LDcgQEAgcHVibGljOgogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNz
OwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlS2lsbHM+
PiBtX2J5dGVjb2RlS2lsbHM7CiAgICAgSGFzaFNldDxzdGQ6OnBhaXI8SlNPYmplY3QqLCBQcm9w
ZXJ0eU9mZnNldD4+IG1fc2FmZVRvTG9hZDsKKyAgICBIYXNoTWFwPFByb3BlcnR5VHlwZUtleSwg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yPiBtX2luZmVycmVkVHlwZXM7CiAgICAgRG9taW5hdG9y
cyBtX2RvbWluYXRvcnM7CiAgICAgUHJlUG9zdE51bWJlcmluZyBtX3ByZVBvc3ROdW1iZXJpbmc7
CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0lu
ZmVycmVkVHlwZUNoZWNrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIGlu
c2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0LCB1
bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwKKyAg
ICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCit7CisgICAgaW5zZXJ0aW9u
U2V0LmdyYXBoKCkucmVnaXN0ZXJJbmZlcnJlZFR5cGUodHlwZSk7CisgICAgCisgICAgc3dpdGNo
ICh0eXBlLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEZvcmNlT1NSRXhp
dCwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJv
b2xlYW46CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05v
bmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEJvb2xlYW5Vc2UpKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdl
KGJhc2VOb2RlLCBPdGhlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6SW50MzI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRl
eCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIEludDMyVXNlKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmln
aW4sIEVkZ2UoYmFzZU5vZGUsIE51bWJlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBTdHJp
bmdVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAg
ICAgICAgIE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5z
dHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbFVzZSkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAg
IE9wSW5mbyhpbnNlcnRpb25TZXQuZ3JhcGgoKS5hZGRTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1
cmUoKSkpLAorICAgICAgICAgICAgRWRnZShiYXNlTm9kZSwgQ2VsbE9yT3RoZXJVc2UpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdp
biwgRWRnZShiYXNlTm9kZSwgT2JqZWN0VXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2Rl
LCBPYmplY3RPck90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBERkdfQ1JBU0goaW5z
ZXJ0aW9uU2V0LmdyYXBoKCksIGJhc2VOb2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNo
ZWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVy
cmVkVHlwZUNoZWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHSW5mZXJyZWRU
eXBlQ2hlY2tfaAorI2RlZmluZSBERkdJbmZlcnJlZFR5cGVDaGVja19oCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkluZmVy
cmVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEluc2Vy
dHMgYSB0eXBlIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGF0IGJhc2VOb2RlIGhhcyB0aGUgZ2l2ZW4g
aW5mZXJyZWQgdHlwZS4KK3ZvaWQgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0
aW9uU2V0JiwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luLCBOb2RlKiBiYXNlTm9kZSwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHSW5mZXJy
ZWRUeXBlQ2hlY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrOwogc3RydWN0
IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcjsKKworICAgIC8vIFRoaXMgbmVlZHMgdG8ga25vdyB0aGUg
aW5mZXJyZWQgdHlwZS4gRm9yIHB1dHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgbmVl
ZCB0byByZW1lbWJlcgorICAgIC8vIHdoYXQgY2hlY2sgaXMgbmVlZGVkLiBGb3IgZ2V0cywgdGhp
cyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgQUkgbWlnaHQgZm9yZ2V0IHdoYXQgdHlw
ZSBpcworICAgIC8vIGd1YXJhbnRlZWQuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGlu
ZmVycmVkVHlwZTsKIH07CiAKIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMzUsMTQgKzIxMzUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogc3RydWN0dXJlcykgewogICAgICAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQpOwogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGN1cnJlbnRPZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb3VyIGFuYWx5c2lzIHRyZWF0
cyBNdWx0aVB1dEJ5T2Zmc2V0IGxpa2UgYW4gZXNjYXBlLCB3ZSBvbmx5IGhhdmUgdG8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGRlYWwgd2l0aCBzdG9yaW5nIHJlc3VsdHMgdGhhdCB3b3Vs
ZCBoYXZlIGJlZW4gcHJldmlvdXNseSBzdG9yZWQgYnkgUHV0QnlPZmZzZXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG5vZGVzLiBUaG9zZSBub2RlcyB3ZXJlIGd1YXJkZWQgYnkgdGhlIGFw
cHJvcHJpYXRlIHR5cGUgY2hlY2tzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGNhbiBzaW1wbHkgdHJ1c3QgdGhhdCB0aGUgaW5j
b21pbmcgdmFsdWUgaGFzIHRoZSByaWdodCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmb3Igd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGFyZSB1c2luZy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVu
dFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2V0LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNldC5hZGQoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLT52
YXJpYW50cy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBs
YWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUHJvcGVydHlUeXBlS2V5X2gKKyNk
ZWZpbmUgREZHUHJvcGVydHlUeXBlS2V5X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIG9iamVjdCBpcyBhIGtleSBmb3IgZmlu
ZGluZyBhIHByb3BlcnR5J3MgdHlwZS4gSXQncyBhIHR1cGxlIG9mIFN0cnVjdHVyZSogYW5kIFVu
aXF1ZWRTdHJpbmdJbXBsKi4KKworY2xhc3MgUHJvcGVydHlUeXBlS2V5IHsKK3B1YmxpYzoKKyAg
ICBQcm9wZXJ0eVR5cGVLZXkoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAg
ICAgICwgbV91aWQobnVsbHB0cikKKyAgICB7CisgICAgfQorCisgICAgUHJvcGVydHlUeXBlS2V5
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6
IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgeworICAg
IH0KKworICAgIFByb3BlcnR5VHlwZUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3VpZChkZWxldGVk
VUlEKCkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZSAmJiBtX3VpZDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFByb3BlcnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fdWlk
ID09IG90aGVyLm1fdWlkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQcm9w
ZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkg
KyBXVEY6OlB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChtX3VpZCk7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fc3RydWN0dXJlICYmIG1fdWlkID09IGRlbGV0ZWRVSUQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRl
eHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKyIsIG1fdWlkKTsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRl
eHQob3V0LCBudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFVuaXF1ZWRT
dHJpbmdJbXBsKiBkZWxldGVkVUlEKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBtX3VpZDsKK307CisKK3N0cnVjdCBQcm9wZXJ0eVR5cGVLZXlIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYSwg
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6
UHJvcGVydHlUeXBlS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpQ
cm9wZXJ0eVR5cGVLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpQcm9wZXJ0
eVR5cGVLZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFs
c2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHUHJvcGVydHlUeXBlS2V5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgogICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAg
IGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CkBAIC0xMjcs
NiArMTI4LDkgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAg
IGlmICghc2FmZVRvRXhlY3V0ZUVkZ2UucmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIC8vIE5PVEU6IFRoaXMgdGVuZHMgdG8gbGllIHdoZW4gaXQgY29tZXMgdG8gZWZmZWN0
ZnVsIG5vZGVzLCBiZWNhdXNlIGl0IGtub3dzIHRoYXQgdGhleSBhcmVuJ3QgZ29pbmcgdG8KKyAg
ICAvLyBnZXQgaG9pc3RlZCBhbnl3YXkuCisKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5OCwzNiArMzg5OCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
bm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigK
LSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVsw
XSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVy
ZSh0aGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
dHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWws
IHN0cnVjdHVyZS5ncHIoKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRDYWNo
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3Qo
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVD
aGVja1N0cnVjdHVyZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxMSwzOCArMzkxMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
bm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIEV4aXRLaW5k
IGV4aXRLaW5kOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCi0g
ICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9k
ZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1
Y3R1cmUoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJl
U2V0KClbMF0pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKLSAgICAgICAgICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKEpJVENvbXBpbGVyOjpF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgbm9kZS0+c3RydWN0dXJlU2V0KClbaV0pKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBleGl0S2luZCwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tT
dHJ1Y3R1cmUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMzIsNiArNTIzMiw4MSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
Tm9kZSogbm9kZSwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIEFTU0VS
VChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOworICAgIAorICAgIGlmIChub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGxHUFIpLCAw
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxHUFJUZW1wb3Jhcnk+IHN0cnVjdHVyZTsKKyAgICAgICAgR1BSUmVnIHN0
cnVjdHVyZUdQUjsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZW1wR1BSID09IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8R1BSVGVtcG9y
YXJ5Pih0aGlzKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS0+Z3ByKCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gdGVtcEdQUjsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhjZWxsR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsr
aSkgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoV2Vha1N0cnVjdHVyZShKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9kZS0+
c3RydWN0dXJlU2V0KClbaV0pKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUo
CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5v
ZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2hlY2tT
dHJ1Y3R1cmUoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgIGNhc2UgQ2VsbFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZTogeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIGNlbGwuZ3ByKCksIEludmFsaWRHUFJS
ZWcpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjZWxsID0gbV9qaXQuYnJhbmNoSWZD
ZWxsKHZhbHVlUmVncyk7CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgdmFs
dWVSZWdzLCBub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKHZhbHVlUmVncywgdGVtcEdQUikpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBjZWxsLmxpbmso
Jm1faml0KTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUsIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIHRlbXBHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewpAQCAt
NTYzNiw2ICs1NzExLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRn
ZSAKICAgICAoU3BlY3VsYXRlQ2VsbE9wZXJhbmQodGhpcywgZWRnZSkpLmdwcigpOwogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCit7Cisg
ICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb2sgPSBtX2ppdC5icmFuY2hJZkNlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygpKTsKKyAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcihvcGVy
YW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKKyAgICBvay5saW5rKCZtX2ppdCk7Cit9CisK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCiB7CiAgICAg
aWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKQEAgLTU5MTYsNiArNjAwNyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIENl
bGxVc2U6CiAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2Up
OworICAgICAgICBicmVhazsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KGVkZ2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIxNSw2ICsyMjE1LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JO
dWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVUeXBlT2YoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKE5v
ZGUqLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOworICAgIHZvaWQgY29tcGlsZUNo
ZWNrU3RydWN0dXJlKE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsK
ICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkBAIC0yMzc0LDYgKzIzNzYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UpOwogICAgIHZvaWQgc3Bl
Y3VsYXRlQm9vbGVhbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAg
dm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVj
dChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UpOwogICAgIHZvaWQgc3Bl
Y3VsYXRlRmluYWxPYmplY3QoRWRnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw3ICszMTQsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAg
ICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAv
LyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4gdGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAg
ICAgICAgICAgaW5zZXJ0QmFycmllcldpdGhJbnZhbGlkRXhpdChtX25vZGVJbmRleCArIDEsIEVk
Z2UobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAg
ICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2No
KEVwb2NoKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAt
NDgxLDExICs0ODEsNiBAQCBwcml2YXRlOgogICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUlu
ZGV4LCBiYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4
aXQodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCi0gICAgewotICAgICAgICBpbnNlcnRC
YXJyaWVyKG5vZGVJbmRleCwgYmFzZSwgZmFsc2UpOwotICAgIH0KLQogICAgIHZvaWQgaW5zZXJ0
QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVl
KQogICAgIHsKICAgICAgICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBv
bmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQotICAgIAorCiAgICAgLy8gSW4gbW9zdCBjYXNl
cywgd2hhdCB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXMgdmVyaWZ5IHdoZXRoZXIgdGhlIHNldCBp
cyB0b3Agb3IgY2xvYmJlcmVkLCBhbmQKICAgICAvLyBpZiBub3QsIGVudW1lcmF0ZSB0aGUgc2V0
IG9mIHN0cnVjdHVyZXMuIFVzZSB0aGlzIG9ubHkgaW4gY2FzZXMgd2hlcmUgdGhlIHNpbmdsZXRv
biBjYXNlIGlzCiAgICAgLy8gbWVhbmluZ2Z1bGx5IHNwZWNpYWwsIGxpa2UgZm9yIHRyYW5zaXRp
b25zLgpAQCAtMjAyLDYgKzIwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIG1fc2V0Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAg
ICAgICAgbV9zZXQuZm9yRWFjaChmdW5jdG9yKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksOSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBLbm93bkNlbGxV
c2U6CiAgICAgICAgIG91dC5wcmludCgiS25vd25DZWxsIik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGxPck90aGVyIik7
CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgb3V0LnByaW50
KCJPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIGVudW0g
VXNlS2luZCB7CiAgICAgS25vd25Cb29sZWFuVXNlLAogICAgIENlbGxVc2UsCiAgICAgS25vd25D
ZWxsVXNlLAorICAgIENlbGxPck90aGVyVXNlLAogICAgIE9iamVjdFVzZSwKICAgICBGdW5jdGlv
blVzZSwKICAgICBGaW5hbE9iamVjdFVzZSwKQEAgLTEwOCw2ICsxMDksOCBAQCBpbmxpbmUgU3Bl
Y3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgY2FzZSBDZWxsVXNlOgogICAgIGNh
c2UgS25vd25DZWxsVXNlOgogICAgICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2FzZSBDZWxs
T3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsIHwgU3BlY090aGVyOwogICAgIGNh
c2UgT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKICAgICBjYXNlIEZ1bmN0
aW9uVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJ
KHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDkgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+dHJh
bnNpdGlvbigpLT5wcmV2aW91cy0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4LDcgQEAg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAg
IGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIENl
bGxPck90aGVyVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDIxICsyMDI2
LDU3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQog
ICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICAKICAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7CiAgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25z
dGFudENhY2hlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hl
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgCi0gICAgICAgIGNoZWNr
U3RydWN0dXJlKAotICAgICAgICAgICAgc3RydWN0dXJlSUQsIGpzVmFsdWVWYWx1ZShjZWxsKSwg
ZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICBbdGhpc10gKFN0
cnVjdHVyZSogc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1
cmVJRChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc3dpdGNoIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
IGNhc2UgS25vd25DZWxsVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoZWNrU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKKyAgICAgICAgICAgICAgICBleGl0S2lu
ZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJl
SUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKKyAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNlbGwgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRpb24iKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUo
bm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgY2hlY2tTdHJ1
Y3R1cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCksIGpzVmFsdWVWYWx1ZSh2YWx1ZSksCisgICAgICAgICAgICAgICAgZXhp
dEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVj
dHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENl
bGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1
ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlz
Tm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNo
ZWNrQ2VsbCgpCkBAIC00MDIyLDYgKzQwNTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxv
Y2tzW2kgKyAxXSA6IGV4aXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKworICAgICAgICAgICAgY2hlY2tJbmZl
cnJlZFR5cGUobV9ub2RlLT5jaGlsZDIoKSwgdmFsdWUsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKICAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewpAQCAtNTY3
NCw2ICs1NzEyLDEzNSBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwg
cmVzdWx0cyk7CiAgICAgfQorCisgICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2Us
IExWYWx1ZSB2YWx1ZSwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorICAg
IHsKKyAgICAgICAgLy8gVGhpcyBjYW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVj
aygpIGJlY2F1c2UgaXQgaXMgY2FsbGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Cisg
ICAgICAgIC8vCisgICAgICAgIC8vICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gbWF5IGJlIGxvd2VyZWQgdG86CisgICAgICAgIC8vCisgICAgICAgIC8v
ICAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKSB7CisgICAgICAgIC8vICAgICBjYXNlIDQy
OgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOworICAg
ICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyAgICAgY2FzZSA0MzoKKyAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4s
IHR5cGUyKTsKKyAgICAgICAgLy8gICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVh
azsKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gd2hlcmUgdHlwZTEg
YW5kIHR5cGUyIGFyZSBkaWZmZXJlbnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhh
dCB0aGUgZWRnZSB3b3VsZCBiZQorICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUy
LCBpbnN0ZWFkIG9mIHR5cGUxIHwgdHlwZTIuCisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHR5
cGUua2luZCgpKSB7CisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNl
IEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok90aGVyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkludDMyOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3ROdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAg
ICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgp
LCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJp
bmcodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNO
b3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBpZiAoIWFic3Ry
YWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5z
dHJ1Y3R1cmUoKSkpKSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVk
VHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJj
aGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjb250aW51YXRpb24i
KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90
Q2VsbENhc2UpOworCisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpKSB7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlYWtT
dHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUo
CisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2Rl
KCksCisgICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IH5TcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdDoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNlbGwgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVj
a0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNr
SW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNl
bGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgIGlzTm90T2JqZWN0KHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAg
ICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsK
KworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvYWRQ
cm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQogICAgIHsKQEAgLTc1MTQsNiArNzY4MSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUNlbGxPck90aGVyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVy
Lm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzU5NCw2ICs3
NzY0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGxvd0NlbGwoZWRnZSk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90Q2VsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiU3BlY3VsYXRlIENlbGxPck90aGVyIG5vdCBjZWxsIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JP
dGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1
ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaXNOb3RD
ZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhp
c05vdENlbGwsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVl
KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBz
cGVjdWxhdGVNYWNoaW5lSW50KEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghbV9pbnRl
cnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKQEAgLTgxMjcsNiArODMxMyw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlv
biA9PSBtX291dC5ib29sZWFuRmFsc2UpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
QVNTRVJUKG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5m
aW5hbGl6ZXItPm9zckV4aXQuc2l6ZSgpKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKQEAgLTgxMzUsOSArODMyNCwxNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZB
cmd1bWVudHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJl
ck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgICAgIAorCiAgICAgICAgIE9TUkV4
aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQubGFzdCgpOwogCisgICAgICAg
IGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5UcnVlKSB7CisgICAgICAgICAgICBl
bWl0T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRyOwogICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBudWxscHRyOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNzggQEAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4mIEFzc2VtYgogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwog
fQogCitBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZO
b3RUeXBlKAorICAgIEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSkK
K3sKKyAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IHJlc3VsdDsKKworICAgIHN3aXRjaCAo
ZGVzY3JpcHRvci5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAg
ICAgICByZXN1bHQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RC
b29sZWFuKHJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPdGhlcihy
ZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkludDMyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVncywgbW9k
ZSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIocmVncywgdGVtcEdQUiwgbW9k
ZSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUpKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdzLnBheWxvYWRHUFIoKSkpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0
dXJlOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisg
ICAgICAgICAgICAgICAgTm90RXF1YWwsCisgICAgICAgICAgICAgICAgQWRkcmVzcyhyZWdzLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAgIEp1bXAg
b2sgPSBicmFuY2hJZk90aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoCisg
ICAgICAgICAgICBicmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgTm90RXF1YWwsCisg
ICAgICAgICAgICAgICAgQWRkcmVzcyhyZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSk7
CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKHJlZ3MsIG1vZGUpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdChyZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgIEp1bXAgb2sgPSBicmFuY2hJZk90
aGVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChyZWdzLCBtb2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3Qo
cmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnB1cmlmeU5hTihGUFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5h
TiA9IGJyYW5jaERvdWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODk5MjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NTUsMzcgKzU1NSw0OCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBK
dW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQorICAgIGVudW0gVGFnUmVnaXN0ZXJzTW9k
ZSB7CisgICAgICAgIERvTm90SGF2ZVRhZ1JlZ2lzdGVycywKKyAgICAgICAgSGF2ZVRhZ1JlZ2lz
dGVycworICAgIH07CisKKyAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnLCBUYWdS
ZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2RlID09
IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWcsIFRydXN0ZWRJbW02NChUYWdNYXNrKSk7CiAjZWxzZQorICAg
ICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
ICNlbmRpZgogICAgIH0KLSAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyByZWdz
KQorICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVy
c01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwocmVncy5ncHIoKSk7CisgICAgICAgIHJl
dHVybiBicmFuY2hJZk5vdENlbGwocmVncy5ncHIoKSwgbW9kZSk7CiAjZWxzZQotICAgICAgICBy
ZXR1cm4gYnJhbmNoSWZOb3RDZWxsKHJlZ3MudGFnR1BSKCkpOworICAgICAgICByZXR1cm4gYnJh
bmNoSWZOb3RDZWxsKHJlZ3MudGFnR1BSKCksIG1vZGUpOwogI2VuZGlmCiAgICAgfQogICAgIAot
ICAgIEp1bXAgYnJhbmNoSWZDZWxsKEdQUlJlZyByZWcpCisgICAgSnVtcCBicmFuY2hJZkNlbGwo
R1BSUmVnIHJlZywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAg
ICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAg
ICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q2NChaZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVnLCBUcnVzdGVkSW1tNjQoVGFnTWFzaykpOwogI2Vs
c2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSk7CiAjZW5kaWYKICAgICB9Ci0gICAgSnVtcCBicmFuY2hJZkNlbGwoSlNWYWx1ZVJlZ3MgcmVn
cykKKyAgICBKdW1wIGJyYW5jaElmQ2VsbChKU1ZhbHVlUmVncyByZWdzLCBUYWdSZWdpc3RlcnNN
b2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICByZXR1cm4gYnJhbmNoSWZDZWxsKHJlZ3MuZ3ByKCkpOworICAgICAgICByZXR1cm4g
YnJhbmNoSWZDZWxsKHJlZ3MuZ3ByKCksIG1vZGUpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGJy
YW5jaElmQ2VsbChyZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaElmQ2VsbChy
ZWdzLnRhZ0dQUigpLCBtb2RlKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTYxMyw0MyArNjI0
LDU1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaElmSW50
MzIoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICBKdW1wIGJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3Mg
cmVncywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwg
cmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgaWYg
KG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW02NChUYWdUeXBlTnVtYmVyKSk7CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9k
ZSk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgSnVt
cCBicmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgSnVtcCBicmFuY2hJZk5v
dEludDMyKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdS
ZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBicmFu
Y2g2NChCZWxvdywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICAgICAgaWYgKG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2g2NChCZWxvdywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEJlbG93LCByZWdzLmdwcigpLCBUcnVzdGVk
SW1tNjQoVGFnVHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUp
OwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogI2VuZGlmCiAgICAgfQogCiAgICAgLy8gTm90
ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDY0LWJpdCBtb2RlLgotICAgIEp1bXAg
YnJhbmNoSWZOdW1iZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCisgICAgSnVt
cCBicmFuY2hJZk51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgVGFnUmVn
aXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgVU5VU0VEX1BBUkFNKHRlbXBHUFIpOwotICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDY0KE5vblplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpKTsKICNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdz
LnRhZ0dQUigpLCB0ZW1wR1BSKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93LCB0ZW1w
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwogI2VuZGlmCiAgICAg
fQogICAgIAogICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1i
aXQgbW9kZS4KLSAgICBKdW1wIGJyYW5jaElmTm90TnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQ
UlJlZyB0ZW1wR1BSKQorICAgIEp1bXAgYnJhbmNoSWZOb3ROdW1iZXIoSlNWYWx1ZVJlZ3MgcmVn
cywgR1BSUmVnIHRlbXBHUFIsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3Rl
cnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1w
R1BSKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWdzLmdwcigpLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBpZiAobW9kZSA9PSBIYXZlVGFn
UmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWdzLmdw
cigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3ByKCksIFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSk7
CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSwgdGVtcEdQUik7CiAgICAgICAgIHJldHVybiBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcgKyAxKSk7CiAjZW5kaWYKQEAgLTcxOSw2ICs3NDIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAg
ICB9CiAKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdFR5cGUoCisgICAgICAgIEpTVmFsdWVSZWdz
LCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgVGFnUmVn
aXN0ZXJzTW9kZSk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEp1bXAgYnJhbmNo
U3RydWN0dXJlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBUIGxlZnRIYW5kU2lkZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzcsNyArMzc3LDggQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgcHRyZGlmZl90
IG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UgPSBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBl
ID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6
aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChvZmZzZXRUb1BhdGNoZWRTdG9yYWdlKQotICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
eworICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZUZvcihp
ZGVudC5pbXBsKCkpKSB7CiAKICAgICAgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
CiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMzLDYg
KzYzMyw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAg
ICAgcGNbNV0udS5wb2ludGVyID0gbnVsbHB0cjsgLy8gb2Zmc2V0CiAgICAgICAgIHBjWzZdLnUu
cG9pbnRlciA9IG51bGxwdHI7IC8vIG5ldyBzdHJ1Y3R1cmUKICAgICAgICAgcGNbN10udS5wb2lu
dGVyID0gbnVsbHB0cjsgLy8gc3RydWN0dXJlIGNoYWluCisgICAgICAgIHBjWzhdLnUucHV0QnlJ
ZEZsYWdzID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4ocGNbOF0udS5w
dXRCeUlkRmxhZ3MgJiBQdXRCeUlkUGVyc2lzdGVudEZsYWdzTWFzayk7CiAgICAgICAgIAogICAg
ICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTY2MCwxMiArNjYy
LDE4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwY1s3XS51LnN0cnVjdHVyZUNoYWluLnNldCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9y
KGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgcGNbNF0udS5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+
aWQoKTsKICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOworICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGljX2Nhc3Q8
UHV0QnlJZEZsYWdzPigKKyAgICAgICAgICAgICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3Mg
fAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JG
b3IoaWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTg5OTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTEzOTAsMTcgKzEzOTAsOTEgQEAgX2xsaW50X29wX3B1dF9ieV9pZDoK
ICAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6CiAgICAgIyB0MiAtPiBjdXJyZW50U3RydWN0
dXJlSUQKICAgICAjIHQwIC0+IG9iamVjdCBiYXNlCisgICAgIyBXZSB3aWxsIGxvc2UgY3VycmVu
dFN0cnVjdHVyZUlEIGluIHRoZSBzaGVuYW5pZ2FucyBiZWxvdy4KIAorICAgIGxvYWRpIDEyW1BD
XSwgdDEKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCisgICAgbG9hZGkg
MzJbUENdLCB0MQorCisgICAgIyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlOgorICAgICMgdDAgLT4g
b2JqZWN0IGJhc2UKKyAgICAjIHQxIC0+IHB1dCBieSBpZCBmbGFncworICAgICMgdDIgLT4gdmFs
dWUgdGFnCisgICAgIyB0MyAtPiB2YWx1ZSBwYXlsb2FkCisKKyAgICBidGlueiB0MSwgUHV0Qnlp
ZFByaW1hcnlUeXBlTWFzaywgLm9wUHV0QnlJZFR5cGVjaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyCisKKyAgICAjIFdlIGhhdmUgb25lIG9mIHRoZSBub24tc3RydWN0dXJlIHR5cGUgY2hl
Y2tzLiBGaW5kIG91dCB3aGljaCBvbmUuCisgICAgYW5kaSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1h
c2ssIHQxCisgICAgYmlsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcsIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZworCisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xs
b3dpbmc6IFN0cmluZywgT2JqZWN0LCBPYmplY3RPck90aGVyLCBUb3AKKyAgICBiaWx0IHQxLCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNz
VGhhbk9iamVjdE9yT3RoZXIKKworICAgICMgV2UgYXJlIGVpdGhlciBPYmplY3RPck90aGVyIG9y
IFRvcC4KKyAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCwgLm9wUHV0QnlJZERv
bmVDaGVja2luZ1R5cGVzCisKKyAgICAjIENoZWNrIGlmIHdlIGFyZSBPYmplY3RPck90aGVyLgor
ICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3QKKy5vcFB1dEJ5
SWRUeXBlQ2hlY2tPdGhlcjoKKyAgICBiaWVxIHQyLCBOdWxsVGFnLCAub3BQdXRCeUlkRG9uZUNo
ZWNraW5nVHlwZXMKKyAgICBiaWVxIHQyLCBVbmRlZmluZWRUYWcsIC5vcFB1dEJ5SWREb25lQ2hl
Y2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNr
TGVzc1RoYW5PYmplY3RPck90aGVyOgorICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2Jq
ZWN0LgorICAgIGJpbmVxIHQyLCBDZWxsVGFnLCAub3BQdXRCeUlkU2xvdworICAgIGJpZXEgdDEs
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0LCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Cisg
ICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hl
Y2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09i
amVjdDoKKyAgICBiYmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1dEJ5
SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlk
VHlwZUNoZWNrTGVzc1RoYW5TdHJpbmc6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dp
bmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIsIEludDMyLCBOdW1iZXIuCisgICAgYmlsdCB0MSwg
UHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50
MzIKKworICAgICMgV2UgYXJlIGVpdGhlciBJbnQzMiBvciBOdW1iZXIuCisgICAgYmllcSB0MSwg
UHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXIKKwor
ICAgIGJpZXEgdDIsIEludDMyVGFnLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBq
bXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcjoKKyAgICBiaWIg
dDIsIExvd2VzdFRhZyArIDEsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAu
b3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMjoKKyAgICAj
IFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlcgorICAg
IGJpbmVxIHQxLCBPcHRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4sIC5vcFB1dEJ5SWRUeXBlQ2hl
Y2tCb3R0b21Pck90aGVyCisgICAgYmllcSB0MiwgQm9vbGVhblRhZywgLm9wUHV0QnlJZERvbmVD
aGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hl
Y2tCb3R0b21Pck90aGVyOgorICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIs
IC5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcgorICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQ
dXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgYmllcSB0Miwg
Q2VsbFRhZywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmUKKyAgICBidGlu
eiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIC5vcFB1
dEJ5SWRUeXBlQ2hlY2tPdGhlcgorICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlk
VHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICBhbmRpIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTWFzaywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgLm9w
UHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzOgogICAgIGxvYWRpIDI0
W1BDXSwgdDEKIAogICAgIGJ0aXogdDEsIC5vcFB1dEJ5SWROb3RUcmFuc2l0aW9uCiAKLSAgICAj
IFRoaXMgaXMgdGhlIHRyYW5zaXRpb24gY2FzZS4gdDEgaG9sZHMgdGhlIG5ldyBTdHJ1Y3R1cmUq
LiB0MiBob2xkcyB0aGUgb2xkIFN0cnVjdHVyZSouCi0gICAgIyBJZiB3ZSBoYXZlIGEgY2hhaW4s
IHdlIG5lZWQgdG8gY2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBtYXkgY2xvYmJlciB0MSB0
byB1c2UgaXQgYXMKLSAgICAjIHNjcmF0Y2guCisgICAgIyBUaGlzIGlzIHRoZSB0cmFuc2l0aW9u
IGNhc2UuIHQxIGhvbGRzIHRoZSBuZXcgU3RydWN0dXJlKi4gSWYgd2UgaGF2ZSBhIGNoYWluLCB3
ZSBuZWVkIHRvCisgICAgIyBjaGVjayBpdC4gdDAgaXMgdGhlIGJhc2UuIFdlIG1heSBjbG9iYmVy
IHQxIHRvIHVzZSBpdCBhcyBzY3JhdGNoLgogICAgIGxvYWRwIDI4W1BDXSwgdDMKICAgICBidHB6
IHQzLCAub3BQdXRCeUlkVHJhbnNpdGlvbkRpcmVjdAogCisgICAgbG9hZGkgMTZbUENdLCB0MiAj
IE5lZWQgb2xkIHN0cnVjdHVyZSBhZ2Fpbi4KICAgICBsb2FkcCBTdHJ1Y3R1cmVDaGFpbjo6bV92
ZWN0b3JbdDNdLCB0MwogICAgIGFzc2VydChtYWNybyAob2spIGJ0cG56IHQzLCBvayBlbmQpCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTI2
NSwxNCArMTI2NSw4OCBAQCBfbGxpbnRfb3BfcHV0X2J5X2lkOgogICAgIHdyaXRlQmFycmllck9u
T3BlcmFuZHMoMSwgMykKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDMpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZUNlbGwodDMsIHQwLCAub3BQdXRCeUlkU2xvdykKLSAgICBsb2Fk
aSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MgotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
big0LCB0MSkKLSAgICBiaW5lcSB0MiwgdDEsIC5vcFB1dEJ5SWRTbG93CisgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDQsIHQyKQorICAgIGJpbmVxIHQyLCBKU0NlbGw6Om1fc3RydWN0dXJlSURb
dDBdLCAub3BQdXRCeUlkU2xvdwogCiAgICAgIyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlOgotICAg
ICMgdDEsIHQyIC0+IGN1cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0MiAtPiBjdXJyZW50IHN0
cnVjdHVyZSBJRAogICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKIAorICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbigzLCB0MSkKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MykKKworICAg
IGxvYWRwRnJvbUluc3RydWN0aW9uKDgsIHQxKQorCisgICAgIyBBdCB0aGlzIHBvaW50LCB3ZSBo
YXZlOgorICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKKyAgICAjIHQxIC0+IHB1dCBieSBpZCBmbGFn
cworICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKKyAgICAjIHQzIC0+IHZhbHVlIHRv
IHB1dAorCisgICAgYnRwbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ssIC5vcFB1dEJ5SWRU
eXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcgorCisgICAgIyBXZSBoYXZlIG9uZSBv
ZiB0aGUgbm9uLXN0cnVjdHVyZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hpY2ggb25lLgorICAg
IGFuZHAgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrLCB0MQorICAgIGJwbHQgdDEsIFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmcKKwor
ICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIE9iamVjdCwgT2JqZWN0
T3JPdGhlciwgVG9wCisgICAgYnBsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90
aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyCisKKyAgICAjIFdl
IGFyZSBlaXRoZXIgT2JqZWN0T3JPdGhlciBvciBUb3AuCisgICAgYnBlcSB0MSwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVUb3AsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworCisgICAgIyBDaGVj
ayBpZiB3ZSBhcmUgT2JqZWN0T3JPdGhlci4KKyAgICBidHF6IHQzLCB0YWdNYXNrLCAub3BQdXRC
eUlkVHlwZUNoZWNrT2JqZWN0Cisub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6CisgICAgYW5kcSB+
VGFnQml0VW5kZWZpbmVkLCB0MworICAgIGJxZXEgdDMsIFZhbHVlTnVsbCwgLm9wUHV0QnlJZERv
bmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBl
Q2hlY2tMZXNzVGhhbk9iamVjdE9yT3RoZXI6CisgICAgIyBXZSBhcmUgZWl0aGVyIFN0cmluZyBv
ciBPYmplY3QuCisgICAgYnRxbnogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRTbG93CisgICAgYnBl
cSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmpl
Y3QKKyAgICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3RyaW5nVHlwZSwgLm9wUHV0QnlJZERv
bmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93Cisub3BQdXRCeUlkVHlwZUNo
ZWNrT2JqZWN0OgorICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgLm9w
UHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1
dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZzoKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZv
bGxvd2luZzogQm90dG9tLCBCb29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJlcgorICAgIGJwbHQg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhh
bkludDMyCisKKyAgICAjIFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgorICAgIGJwZXEg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVy
CisKKyAgICBicWFlcSB0MywgdGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5
cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXI6
CisgICAgYnRxbnogdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBl
cworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5J
bnQzMjoKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogQm90dG9tLCBCb29sZWFu
LCBPdGhlci4KKyAgICBicG5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuLCAub3BQ
dXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgorICAgIHhvcnEgVmFsdWVGYWxzZSwgdDMKKyAg
ICBidHF6IHQzLCB+MSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1
dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90aGVyOgorICAgIGJwZXEg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcgor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVj
a09iamVjdFdpdGhTdHJ1Y3R1cmUKKyAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcgorICAgIGpt
cCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVy
ZToKKyAgICB1cnNoaWZ0cCAzLCB0MQorICAgIGJpbmVxIHQxLCBKU0NlbGw6Om1fc3RydWN0dXJl
SURbdDNdLCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXM6CiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIAogICAgIGJ0aXogdDEsIC5vcFB1
dEJ5SWROb3RUcmFuc2l0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTIwNCw2ICsyMDQsMjIgQEAgZWxzZQogICAgIGNvbnN0IExvd2VzdFRhZyA9IERl
bGV0ZWRWYWx1ZVRhZwogZW5kCiAKKyMgTk9URTogVGhlIHZhbHVlcyBiZWxvdyBtdXN0IGJlIGlu
IHN5bmMgd2l0aCB3aGF0IGlzIGluIFB1dEJ5SWRGbGFncy5oLgorY29uc3QgUHV0QnlJZFByaW1h
cnlUeXBlTWFzayA9IDB4NgorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgw
Citjb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyCitjb25z
dCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciA9IDB4NAorY29u
c3QgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OAorY29uc3QgUHV0QnlJZFNlY29uZGFy
eVR5cGVCb3R0b20gPSAweDAKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiA9IDB4
OAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAKK2NvbnN0IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlSW50MzIgPSAweDE4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJl
ciA9IDB4MjAKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOAorY29uc3Qg
UHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QgPSAweDMwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdE9yT3RoZXIgPSAweDM4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9
IDB4NDAKKwogY29uc3QgQ2FsbE9wQ29kZVNpemUgPSA5CiAKIGlmIFg4Nl82NCBvciBBUk02NCBv
ciBDX0xPT1AKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJy
ZWRUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSW5mZXJyZWRUeXBl
RmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKK3B1YmxpYzoKKyAgICBJbmZlcnJlZFR5
cGVGaXJlRGV0YWlsKAorICAgICAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwKKyAgICAgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9y
JiBvbGREZXNjcmlwdG9yLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIG5ld0Rlc2Ny
aXB0b3IsCisgICAgICAgIEpTVmFsdWUgb2ZmZW5kaW5nVmFsdWUpCisgICAgICAgIDogbV9pbmZl
cnJlZFR5cGUoaW5mZXJyZWRUeXBlKQorICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICAgICAgLCBt
X29sZERlc2NyaXB0b3Iob2xkRGVzY3JpcHRvcikKKyAgICAgICAgLCBtX25ld0Rlc2NyaXB0b3Io
bmV3RGVzY3JpcHRvcikKKyAgICAgICAgLCBtX29mZmVuZGluZ1ZhbHVlKG9mZmVuZGluZ1ZhbHVl
KQorICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAg
ICAgICJJbmZlcnJlZCB0eXBlIGNoYW5nZWQgb24gIiwgUmF3UG9pbnRlcihtX2luZmVycmVkVHlw
ZSksICIgZm9yIHByb3BlcnR5ICIsIG1fdWlkLCAiOiAiCisgICAgICAgICAgICAib2xkIHR5cGUg
d2FzICIsIG1fb2xkRGVzY3JpcHRvciwgIiB3aGlsZSBkZXNpcmVkIHR5cGUgaXMgIiwgbV9uZXdE
ZXNjcmlwdG9yKTsKKyAgICAgICAgaWYgKG1fb2ZmZW5kaW5nVmFsdWUpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiBkdWUgdG8gIiwgbV9vZmZlbmRpbmdWYWx1ZSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEluZmVycmVkVHlwZSogbV9pbmZlcnJlZFR5cGU7CisgICAgUmVmUHRyPFVuaXF1ZWRT
dHJpbmdJbXBsPiBtX3VpZDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9vbGREZXNj
cmlwdG9yOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX25ld0Rlc2NyaXB0b3I7Cisg
ICAgSlNWYWx1ZSBtX29mZmVuZGluZ1ZhbHVlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGU6OnNfaW5mbyA9IHsgIkluZmVycmVk
VHlwZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRUeXBlKSB9OworCitJbmZl
cnJlZFR5cGUqIEluZmVycmVkVHlwZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5
cGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVHlwZT4odm0u
aGVhcCkpIEluZmVycmVkVHlwZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gc3RhdGljX2Nh
c3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlLT5JbmZlcnJlZFR5cGU6
On5JbmZlcnJlZFR5cGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBq
c0Nhc3Q8SW5mZXJyZWRUeXBlKj4oY2VsbCk7CisKKyAgICBpZiAoaW5mZXJyZWRUeXBlLT5tX3N0
cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKCZpbmZl
cnJlZFR5cGUtPm1fc3RydWN0dXJlLT5tX2ZpbmFsaXplcik7Cit9CisKK0luZmVycmVkVHlwZTo6
S2luZCBJbmZlcnJlZFR5cGU6OmtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7Cisg
ICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2spIHsKKyAgICBjYXNlIFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeToKKyAgICAgICAgc3dpdGNoIChmbGFncyAmIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlTWFzaykgeworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBl
Qm90dG9tOgorICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICAgICAgY2FzZSBQdXRCeUlk
U2Vjb25kYXJ5VHlwZUJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICAg
ICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyOgorICAgICAgICAgICAgcmV0dXJuIE90
aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzI6CisgICAgICAgICAg
ICByZXR1cm4gSW50MzI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXI6
CisgICAgICAgICAgICByZXR1cm4gTnVtYmVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRh
cnlUeXBlU3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgY2FzZSBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3Q7Cisg
ICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyOgorICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdE9yT3RoZXI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5
cGVUb3A6CisgICAgICAgICAgICByZXR1cm4gVG9wOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBC
b3R0b207CisgICAgICAgIH0KKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBPYmplY3RXaXRoU3RydWN0dXJlOworICAgIGNhc2Ug
UHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHJl
dHVybiBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQm90dG9tOworICAg
IH0KK30KKworSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
cjo6Zm9yVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkp
CisgICAgICAgIHJldHVybiBCb29sZWFuOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICByZXR1cm4gT3RoZXI7CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIEludDMyOworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm4gTnVtYmVyOworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBKU0NlbGwq
IGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkg
eworICAgICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKE9i
amVjdFdpdGhTdHJ1Y3R1cmUsIGNlbGwtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRvcDsKK30KKworSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6Zm9yRmxhZ3MoVk0m
IHZtLCBQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7CisgICAgS2luZCBraW5kID0ga2luZEZvckZsYWdz
KGZsYWdzKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBpZiAoaGFzU3RydWN0dXJl
KGtpbmQpKQorICAgICAgICBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5n
ZXQoZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKTsKKyAgICBlbHNlCisgICAgICAgIHN0cnVjdHVy
ZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIERlc2NyaXB0b3Ioa2luZCwgc3RydWN0dXJlKTsKK30K
KworUHV0QnlJZEZsYWdzIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cHV0QnlJZEZsYWdzKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNv
bmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSk7CisgICAgY2FzZSBCb29sZWFuOgor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4pOworICAgIGNhc2UgT3Ro
ZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmlt
YXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIpOworICAgIGNhc2Ug
SW50MzI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQ
cmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIpOworICAgIGNh
c2UgTnVtYmVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRC
eUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlcik7Cisg
ICAgY2FzZSBTdHJpbmc6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+
KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5n
KTsKKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVP
YmplY3QpOworICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPYmplY3RPck90aGVyKTsKKyAgICBjYXNlIFRvcDoKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwg
UHV0QnlJZFNlY29uZGFyeVR5cGVUb3ApOworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICBQ
dXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlIHwgZW5jb2RlU3RydWN0dXJlSUQo
bV9zdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVy
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAgICAgICAgICAg
IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIHwgZW5jb2RlU3Ry
dWN0dXJlSUQobV9zdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUHV0QnlJZE5vbmU7Cit9CisKK3ZvaWQgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yOjptZXJnZShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikKK3sKKyAg
ICAvLyBGaWx0ZXIgb3V0IGNvbW1vbiB0aGluZ3MgdG8gc2ltcGxpZnkgdGhlIHN3aXRjaCBzdGF0
ZW1lbnQgYmVsb3cuCisgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG90aGVyLm1fa2luZCA9PSBCb3R0b20pCisgICAgICAgIHJldHVybjsKKworICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206CisgICAgICAgICp0aGlzID0gb3RoZXI7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW46CisgICAgY2FzZSBTdHJpbmc6Cisg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdGhlcjoKKyAg
ICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICAgICAgKnRoaXMgPSBEZXNjcmlwdG9yKE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLCBvdGhl
ci5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0
OgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVj
dE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNh
c2UgSW50MzI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2Ug
TnVtYmVyOgorICAgICAgICAgICAgKnRoaXMgPSBOdW1iZXI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgTnVtYmVyOgorICAgICAgICBzd2l0Y2ggKG90
aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZTogLy8gSWYgd2Ugc2VlIHRoaXMgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIHN0cnVjdHVy
ZXMgZGlkbid0IG1hdGNoLgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgICAgICp0aGlz
ID0gT2JqZWN0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9y
T3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoK
KyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIG1fa2luZCA9IE9iamVjdFdpdGhTdHJ1
Y3R1cmVPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVy
Lm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjogLy8gSWYgd2Ugc2VlIHRoaXMgaGVyZSwgdGhlbiB3ZSBrbm93IHRoYXQg
dGhlIHN0cnVjdHVyZXMgZGlkbid0IG1hdGNoLgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6
CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewor
ICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2Jq
ZWN0T3JPdGhlcjoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2Jq
ZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
Y2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE90aGVy
OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIFRvcDoK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpyZW1vdmVTdHJ1Y3R1cmUo
KQoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsK
KyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpzdWJzdW1lcyhjb25zdCBEZXNjcmlw
dG9yJiBvdGhlcikgY29uc3QKK3sKKyAgICBEZXNjcmlwdG9yIG1lcmdlZCA9ICp0aGlzOworICAg
IG1lcmdlZC5tZXJnZShvdGhlcik7CisgICAgcmV0dXJuICp0aGlzID09IG1lcmdlZDsKK30KKwor
dm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2lu
ZCk7CisgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICBvdXQucHJpbnQoIjoiLCBpbkNvbnRl
eHQoKm1fc3RydWN0dXJlLCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4
dChvdXQsIG51bGxwdHIpOworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZShWTSYgdm0p
CisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBt
X3dhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQoreworfQorCitJbmZlcnJlZFR5cGU6On5J
bmZlcnJlZFR5cGUoKQoreworfQorCitib29sIEluZmVycmVkVHlwZTo6Y2FuV2F0Y2goY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkK
K3sKKyAgICBpZiAoZXhwZWN0ZWQua2luZCgpID09IFRvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikgPT0gZXhwZWN0ZWQ7Cit9CisK
K2Jvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJiBleHBlY3RlZCkK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBj
YW5XYXRjaChsb2NrZXIsIGV4cGVjdGVkKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdh
dGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBXYXRjaHBvaW50KiB3
YXRjaHBvaW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKS5raW5k
KCkgIT0gVG9wKTsKKworICAgIG1fd2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdhdGNocG9pbnQp
Cit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBhZGRXYXRj
aHBvaW50KGxvY2tlciwgd2F0Y2hwb2ludCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KFJhd1BvaW50ZXIodGhp
cyksICI6IiwgZGVzY3JpcHRvcigpKTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OndpbGxTdG9y
ZVZhbHVlU2xvdyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBEZXNj
cmlwdG9yIG15VHlwZSA9IGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICBEZXNjcmlwdG9yIG90aGVy
VHlwZSA9IERlc2NyaXB0b3I6OmZvclZhbHVlKHZhbHVlKTsKKworICAgIG15VHlwZS5tZXJnZShv
dGhlclR5cGUpOworCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSAhPSBteVR5cGUpOyAv
LyBUaGUgdHlwZSBtdXN0IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBvbiB0aGUgc2xvdyBwYXRoLgor
CisgICAgc2V0KGxvY2tlciwgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIG15VHlwZSk7CisKKyAg
ICByZXR1cm4ga2luZChsb2NrZXIpICE9IFRvcDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6Om1h
a2VUb3BTbG93KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHNldChsb2NrZXIsIHZtLCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUoKSwgVG9wKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnNldCgK
KyAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSBvZmZlbmRpbmdWYWx1ZSwKKyAgICBEZXNjcmlwdG9y
IG5ld0Rlc2NyaXB0b3IpCit7CisgICAgLy8gV2Ugd2lsbCB0cmlnZ2VyIHdyaXRlIGJhcnJpZXJz
IHdoaWxlIGhvbGRpbmcgb3VyIGxvY2suIEN1cnJlbnRseSwgd3JpdGUgYmFycmllcnMgZG9uJ3Qg
R0MsIGJ1dCB0aGF0CisgICAgLy8gY291bGQgY2hhbmdlLiBJZiBpdCBkb2VzLCB3ZSBkb24ndCB3
YW50IHRvIGRlYWRsb2NrLiBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSB1c2VkCisgICAgLy8gR0NT
YWZlQ29uY3VycmVudEpJVExvY2tlciBpbiB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlciBpcyBv
biBhIGZhc3QgcGF0aCBzbyBtYXliZSB0aGF0IHdvdWxkbid0IGJlCisgICAgLy8gYSBnb29kIGlk
ZWEuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIC8v
IEJlIGRlZmVuc2l2ZTogaWYgd2UncmUgbm90IHJlYWxseSBjaGFuZ2luZyB0aGUgdHlwZSwgdGhl
biB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChkZXNjcmlwdG9yKGxvY2tl
cikgPT0gbmV3RGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5ldyBk
ZXNjcmlwdG9yIG11c3QgYmUgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4KKyAg
ICBBU1NFUlQobmV3RGVzY3JpcHRvci5zdWJzdW1lcyhkZXNjcmlwdG9yKGxvY2tlcikpKTsKKwor
ICAgIC8vIElmIHRoZSBuZXcgZGVzY3JpcHRvcnMgaGF2ZSBkaWZmZXJlbnQgc3RydWN0dXJlcywg
dGhlbiBpdCBjYW4gb25seSBiZSBiZWNhdXNlIG9uZSBpcyBudWxsLgorICAgIGlmIChkZXNjcmlw
dG9yKGxvY2tlcikuc3RydWN0dXJlKCkgIT0gbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAg
ICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yKGxvY2tlcikuc3RydWN0dXJlKCkgfHwgIW5ld0Rlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpOworCisgICAgLy8gV2UgYXJlIGNoYW5naW5nIHRoZSB0eXBlLCBz
byBtYWtlIHN1cmUgdGhhdCBpZiBhbnlvbmUgd2FzIHdhdGNoaW5nLCB0aGV5IGZpbmQgb3V0IGFi
b3V0IGl0IG5vdy4gSWYKKyAgICAvLyBhbnlvbmUgaXMgd2F0Y2hpbmcsIHdlIG1ha2Ugc3VyZSB0
byBnbyB0byBUb3Agc28gdGhhdCB3ZSBkb24ndCBkbyB0aGlzIHNvcnQgb2YgdGhpbmcgYWdhaW4u
CisgICAgaWYgKG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IENsZWFyV2F0Y2hwb2ludCkgewor
ICAgICAgICAvLyBXZSBjYW5ub3QgaGF2ZSBiZWVuIGludmFsaWRhdGVkLCBzaW5jZSBpZiB3ZSB3
ZXJlLCB0aGVuIHdlJ2QgYWxyZWFkeSBiZSBhdCBUb3AuCisgICAgICAgIEFTU0VSVChtX3dhdGNo
cG9pbnRTZXQuc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKKworICAgICAgICBJbmZlcnJlZFR5
cGVGaXJlRGV0YWlsIGRldGFpbCgKKyAgICAgICAgICAgIHRoaXMsIHByb3BlcnR5TmFtZS51aWQo
KSwgZGVzY3JpcHRvcihsb2NrZXIpLCBuZXdEZXNjcmlwdG9yLCBvZmZlbmRpbmdWYWx1ZSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBkbyBleHBlbnNpdmUgdGhpbmdzIGJl
Y2F1c2Ugc29tZSBjb21waWxlciB0aHJlYWQgZGVjaWRlZCB0byB3YXRjaCB0aGlzIHR5cGUgYW5k
CisgICAgICAgIC8vIHRoZW4gdGhlIHR5cGUgY2hhbmdlZC4gQXNzdW1lIHRoYXQgdGhpcyBwcm9w
ZXJ0eSBpcyBjcmF6eSwgYW5kIGRvbid0IGV2ZXIgZG8gYW55IG1vcmUgdGhpbmdzIGZvcgorICAg
ICAgICAvLyBpdC4KKyAgICAgICAgbmV3RGVzY3JpcHRvciA9IFRvcDsKKworICAgICAgICBtX3dh
dGNocG9pbnRTZXQuZmlyZUFsbChkZXRhaWwpOworICAgIH0KKworICAgIC8vIFJlbW92ZSB0aGUg
b2xkIEluZmVycmVkU3RydWN0dXJlIG9iamVjdCBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAg
ICBpZiAoIW5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIG1fc3RydWN0dXJlID0g
bnVsbHB0cjsKKworICAgIC8vIEFkZCBhIG5ldyBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYg
d2UgbmVlZCBvbmUgbm93LgorICAgIGlmIChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKSB7Cisg
ICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFncmVl
IG9uIHRoZSBzdHJ1Y3R1cmVzIGlmIHdlIGdldCBoZXJlLgorICAgICAgICAgICAgQVNTRVJUKG5l
d0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkgPT0gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1
ZTxJbmZlcnJlZFN0cnVjdHVyZT4odm0sIHRoaXMsIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkp
OworICAgICAgICAgICAgbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoJm1fc3RydWN0dXJlLT5tX3dhdGNocG9pbnQpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRmluYWxseSwgc2V0IHRoZSBkZXNjcmlwdG9yIGtpbmQuCisgICAgbV9raW5kID0g
bmV3RGVzY3JpcHRvci5raW5kKCk7CisKKyAgICAvLyBBc3NlcnQgdGhhdCB3ZSBkaWQgdGhpbmdz
LgorICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgPT0gbmV3RGVzY3JpcHRvcik7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjpyZW1vdmVTdHJ1Y3R1cmUoKQoreworICAgIC8vIEZJWE1FOiBG
aW5kIGFuIGVsZWdhbnQgYW5kIGNoZWFwIHdheSB0byB0aHJlYWQgaW5mb3JtYXRpb24gYWJvdXQg
d2h5IHdlIGdvdCBoZXJlIGludG8gdGhlIGZpcmUKKyAgICAvLyBkZXRhaWwgaW4gc2V0KCkuCisg
ICAgCisgICAgVk0mIHZtID0gKkhlYXA6OmhlYXAodGhpcyktPnZtKCk7CisKKyAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAorICAgIERlc2NyaXB0b3IgbmV3RGVz
Y3JpcHRvciA9IGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICBuZXdEZXNjcmlwdG9yLnJlbW92ZVN0
cnVjdHVyZSgpOworICAgIAorICAgIHNldChsb2NrZXIsIHZtLCBQcm9wZXJ0eU5hbWUobnVsbHB0
ciksIEpTVmFsdWUoKSwgbmV3RGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJ
bmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWls
JikKK3sKKyAgICBJbmZlcnJlZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAg
ICBiaXR3aXNlX2Nhc3Q8SW5mZXJyZWRTdHJ1Y3R1cmUqPigKKyAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1f
d2F0Y2hwb2ludCkpOworCisgICAgaW5mZXJyZWRTdHJ1Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVT
dHJ1Y3R1cmUoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlRmlu
YWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgSW5mZXJyZWRTdHJ1Y3R1
cmUqIGluZmVycmVkU3RydWN0dXJlID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3Ry
dWN0dXJlKj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNU
X09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBtX2ZpbmFsaXplcikpOworCisgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkKGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudCkpOworICAgIAorICAg
IGlmICghSGVhcDo6aXNNYXJrZWQoaW5mZXJyZWRTdHJ1Y3R1cmUtPm1fc3RydWN0dXJlLmdldCgp
KSkKKyAgICAgICAgaW5mZXJyZWRTdHJ1Y3R1cmUtPm1fcGFyZW50LT5yZW1vdmVTdHJ1Y3R1cmUo
KTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1
cmUoVk0mIHZtLCBJbmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgLCBtX3N0cnVjdHVyZSh2bSwgcGFyZW50LCBzdHJ1
Y3R1cmUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEluZmVycmVkVHlwZTo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAgICAgIG91dC5wcmludCgiQm90dG9tIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT3RoZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoK
KyAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6Cisg
ICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIG91dC5wcmlu
dCgiT2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0T3JPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RPck90aGVyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBvdXQucHJpbnQo
IlRvcCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBJbmZlcnJlZFR5cGVfaAorI2RlZmluZSBJbmZlcnJlZFR5cGVfaAor
CisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNp
bmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKKyNpbmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKKyNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGlzIGFuIG9i
amVjdCB1c2VkIGZvciB0aGUgaW5mZXJlbmNlIG9mIHRoZSB0eXBlcyBvZiBvYmplY3QgcHJvcGVy
dGllcy4KKworY2xhc3MgSW5mZXJyZWRUeXBlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGUq
IGNyZWF0ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIGVudW0gS2luZCA6IHVpbnQ4X3QgeworICAgICAgICBCb3R0b20s
CisgICAgICAgIEJvb2xlYW4sCisgICAgICAgIE90aGVyLAorICAgICAgICBJbnQzMiwKKyAgICAg
ICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcsCisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmUs
CisgICAgICAgIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLAorICAgICAgICBPYmplY3QsCisg
ICAgICAgIE9iamVjdE9yT3RoZXIsCisgICAgICAgIFRvcAorICAgIH07CisKKyAgICBzdGF0aWMg
S2luZCBraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBo
YXNTdHJ1Y3R1cmUoS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
Y2xhc3MgRGVzY3JpcHRvciB7CisgICAgcHVibGljOgorICAgICAgICBEZXNjcmlwdG9yKCkKKyAg
ICAgICAgICAgIDogbV9raW5kKEJvdHRvbSkKKyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUobnVs
bHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRGVzY3JpcHRvcihLaW5kIGtp
bmQsIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogbV9raW5k
KGtpbmQpCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBEZXNjcmlwdG9yIGZv
clZhbHVlKEpTVmFsdWUpOworCisgICAgICAgIHN0YXRpYyBEZXNjcmlwdG9yIGZvckZsYWdzKFZN
JiwgUHV0QnlJZEZsYWdzKTsKKworICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2luZCAhPSBCb3R0b20gfHwgbV9z
dHJ1Y3R1cmU7CisgICAgICAgIH0KKworICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZTsgfQorCisgICAgICAgIFB1dEJ5SWRGbGFncyBwdXRCeUlkRmxhZ3MoKSBj
b25zdDsKKworICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaW5jbHVkZXNWYWx1ZShKU1ZhbHVl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAg
ICAgICAgY2FzZSBCb3R0b206CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBCb29sZWFuOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xl
YW4oKTsKKyAgICAgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5pc0ludDMyKCk7CisgICAgICAgICAgICBjYXNlIE51bWJl
cjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoKTsKKyAgICAgICAgICAg
IGNhc2UgU3RyaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpOwor
ICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkgPT0gbV9z
dHJ1Y3R1cmU7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpCisgICAgICAg
ICAgICAgICAgICAgIHx8ICh2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCkgPT0gbV9zdHJ1Y3R1cmUpOworICAgICAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIE9iamVj
dE9yT3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkgfHwgdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNhc2UgVG9wOgorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgICAgICYmIG1fc3Ry
dWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6
UHRySGFzaDxTdHJ1Y3R1cmUqPjo6aGFzaChtX3N0cnVjdHVyZSkgXiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9raW5kKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIG1lcmdlKGNvbnN0
IERlc2NyaXB0b3ImKTsKKyAgICAgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIG1vcmUgZ2VuZXJhbCB0aGFu
IHRoZSBvdGhlciBvbmUuCisgICAgICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYp
IGNvbnN0OworCisgICAgICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgS2luZCBtX2tpbmQ7CisgICAgICAgIFN0cnVjdHVyZSog
bV9zdHJ1Y3R1cmU7CisgICAgfTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3JNYWluVGhy
ZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBEZXNjcmlwdG9yKG1fa2luZCwgbV9z
dHJ1Y3R1cmUgPyBtX3N0cnVjdHVyZS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKKyAgICB9Cisg
ICAgCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7Cisg
ICAgfQorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcigpIGNvbnN0CisgICAgeworICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZGVzY3Jp
cHRvcihsb2NrZXIpOworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyKSBjb25zdCB7IHJldHVybiBkZXNjcmlwdG9yKGxvY2tlcikua2lu
ZCgpOyB9CisKKyAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFRvcDsg
fQorICAgIGJvb2wgaXNSZWxldmFudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCAhPSBUb3A7IH0K
KworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgSW5mZXJyZWRUeXBlIGlzIHN0aWxsIHJlbGV2
YW50IGFmdGVyIHRoZSBzdG9yZS4gSXQncyBub3QgcmVsZXZhbnQgaWYgaXQncyBUb3AuCisgICAg
QUxXQVlTX0lOTElORSBib29sIHdpbGxTdG9yZVZhbHVlKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIERlc2NyaXB0b3IgY3Vy
cmVudERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgICAgICBpZiAoY3Vy
cmVudERlc2NyaXB0b3IuaW5jbHVkZXNWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
Y3VycmVudERlc2NyaXB0b3Iua2luZCgpICE9IFRvcDsKKyAgICAgICAgcmV0dXJuIHdpbGxTdG9y
ZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgfQorCisgICAgLy8gSW1t
ZWRpYXRlbHkgbWFrZXMgdGhpcyB0eXBlIGlycmVsZXZhbnQuCisgICAgdm9pZCBtYWtlVG9wKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKKyAgICB7CisgICAgICAgIGlmIChpc1Rv
cCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYWtlVG9wU2xvdyh2bSwgcHJvcGVy
dHlOYW1lKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgY3VycmVudGx5IG1h
a2VzIHNlbnNlIHRvIHdhdGNoIHRoaXMgSW5mZXJyZWRUeXBlIGZvciB0aGlzIGRlc2NyaXB0b3Iu
IE5vdGUgdGhhdAorICAgIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBUb3Au
CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNv
bnN0IERlc2NyaXB0b3ImKTsKKyAgICBib29sIGNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImKTsK
KyAgICAKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYg
bG9ja2VyLCBXYXRjaHBvaW50Kik7CisgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQq
KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEluZmVycmVkVHlwZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGUoKTsKKworICAgIGJvb2wgd2ls
bFN0b3JlVmFsdWVTbG93KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKyAgICB2b2lkIG1h
a2VUb3BTbG93KFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICB2b2lkIHNldChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIERlc2NyaXB0b3IpOwor
ICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRM
b2NrIG1fbG9jazsKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7IEJvdHRvbSB9OworCisgICAgY2xh
c3MgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IDogcHVibGljIFdhdGNocG9pbnQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50KCkgeyB9CisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpcmVJbnRlcm5hbChjb25zdCBGaXJlRGV0YWlsJikg
b3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVy
IDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
SW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIoKSB7IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAg
Y2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlKFZNJiwgSW5mZXJyZWRU
eXBlKiBwYXJlbnQsIFN0cnVjdHVyZSopOworCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH07CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBmcmllbmQgY2xhc3MgSW5mZXJyZWRUeXBlOworICAgICAgICBmcmllbmQgY2xhc3Mg
SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OworICAgICAgICBmcmllbmQgY2xhc3MgSW5mZXJy
ZWRTdHJ1Y3R1cmVGaW5hbGl6ZXI7CisgICAgICAgIAorICAgICAgICBJbmZlcnJlZFR5cGUqIG1f
cGFyZW50OworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKwor
ICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgbV93YXRjaHBvaW50OworICAgICAg
ICBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplciBtX2ZpbmFsaXplcjsKKyAgICB9OworCisgICAg
c3RkOjp1bmlxdWVfcHRyPEluZmVycmVkU3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKworICAgIC8v
IE5PVEU6IElmIHRoaXMgaXMgYmVpbmcgd2F0Y2hlZCwgd2UgdHJhbnNmb3JtIHRvIFRvcCBiZWNh
dXNlIHRoYXQgaW1wbGllcyB0aGF0IGl0IHdvdWxkbid0IGJlCisgICAgLy8gcHJvZml0YWJsZSB0
byB3YXRjaCBpdCBhZ2Fpbi4gQWxzbywgdGhpcyBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFu
ZCBpcyBuZXZlciBleHBvc2VkIHRvIHRoZSBERkcKKyAgICAvLyB0aHJlYWQuIFRoZSBERkcgd2ls
bCB1c2UgdGhlIEluZmVycmVkVHlwZSBhcyB0aGUgdGhpbmcgdGhhdCBpdCB3YXRjaGVzLgorICAg
IElubGluZVdhdGNocG9pbnRTZXQgbV93YXRjaHBvaW50U2V0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkluZmVycmVkVHlwZTo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gSW5mZXJyZWRUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRU
eXBlVGFibGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFR5cGVUYWJsZTo6c19pbmZvID0geyAiSW5mZXJy
ZWRUeXBlVGFibGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZVRhYmxl
KSB9OworCitJbmZlcnJlZFR5cGVUYWJsZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZShWTSYg
dm0pCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEluZmVycmVkVHlwZVRhYmxlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlVGFibGUo
dm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQorewor
ICAgIEluZmVycmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IHN0YXRpY19jYXN0PElu
ZmVycmVkVHlwZVRhYmxlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRUeXBlVGFibGUtPkluZmVycmVk
VHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJl
ZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVy
cmVkVHlwZVRhYmxlKiBpbmZlcnJlZFR5cGVUYWJsZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGVUYWJs
ZSo+KGNlbGwpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoaW5mZXJyZWRUeXBl
VGFibGUtPm1fbG9jayk7CisgICAgCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGluZmVycmVkVHlw
ZVRhYmxlLT5tX3RhYmxlKSB7CisgICAgICAgIGlmICghZW50cnkudmFsdWUpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pc1JlbGV2YW50KCkpCisgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZW50cnkudmFsdWUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbnRyeS52YWx1ZS5jbGVhcigpOworICAgIH0KK30KKworSW5mZXJyZWRUeXBlKiBJ
bmZlcnJlZFR5cGVUYWJsZTo6Z2V0KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworICAgIGF1dG8gaXRlciA9IG1fdGFibGUuZmluZCh1aWQpOwor
ICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFRha2UgdGhpcyBvcHBvcnR1bml0eSB0byBwcnVuZSBp
bnZhbGlkYXRlZCB0eXBlcy4KKyAgICBpZiAoIWl0ZXItPnZhbHVlLT5pc1JlbGV2YW50KCkpIHsK
KyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLmdldCgpOworfQorCitJbmZlcnJlZFR5cGUq
IEluZmVycmVkVHlwZVRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIHJldHVybiBnZXQobG9ja2Vy
LCB1aWQpOworfQorCitJbmZlcnJlZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gZ2V0KHByb3BlcnR5TmFtZS51aWQo
KSk7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlVGFibGU6OndpbGxTdG9yZVZhbHVlKAorICAgIFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgU3RvcmVkUHJv
cGVydHlBZ2UgYWdlKQoreworICAgIC8vIFRoZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhl
IGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQgbW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIAor
ICAgIGlmIChhZ2UgPT0gT2xkUHJvcGVydHkpIHsKKyAgICAgICAgVGFibGVUeXBlOjppdGVyYXRv
ciBpdGVyID0gbV90YWJsZS5maW5kKHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgIGlmIChp
dGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgorICAgICAgICAKKyAgICAgICAg
aWYgKGl0ZXItPnZhbHVlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGl0ZXItPnZhbHVl
LmNsZWFyKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUYWJsZVR5cGU6
OkFkZFJlc3VsdCByZXN1bHQ7CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFkZChwcm9wZXJ0eU5hbWUu
dWlkKCksIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOworICAgIH0KKyAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBJ
bmZlcnJlZFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuc2V0KHZtLCB0aGlzLCBpbmZlcnJlZFR5
cGUpOworICAgIH0gZWxzZSBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+d2lsbFN0
b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjptYWtlVG9wKFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIC8vIFRo
ZSBhbGdvcml0aG0gaGVyZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBvbmx5IG9uZSB0aHJlYWQg
bW9kaWZpZXMgdGhlIGhhc2ggbWFwLgorICAgIGlmIChhZ2UgPT0gT2xkUHJvcGVydHkpIHsKKyAg
ICAgICAgVGFibGVUeXBlOjppdGVyYXRvciBpdGVyID0gbV90YWJsZS5maW5kKHByb3BlcnR5TmFt
ZS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdGFibGUuZW5kKCkgfHwgIWl0ZXItPnZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuOyAvLyBBYnNlbmNlIG9uIHJlcGxhY2UgPT4gdG9wLgor
CisgICAgICAgIGl0ZXItPnZhbHVlLT5tYWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVGFi
bGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVy
dHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAg
aWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmNsZWFyKCk7Cit9CisKK0luZmVycmVkVHlwZVRhYmxlOjpJ
bmZlcnJlZFR5cGVUYWJsZShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFR5cGVU
YWJsZVN0cnVjdHVyZS5nZXQoKSkKK3sKK30KKworSW5mZXJyZWRUeXBlVGFibGU6On5JbmZlcnJl
ZFR5cGVUYWJsZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlVGFibGVfaAor
I2RlZmluZSBJbmZlcnJlZFR5cGVUYWJsZV9oCisKKyNpbmNsdWRlICJJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIHRhYmxlIG9mIGluZmVycmVkIHR5cGVzIGZvciBzb21lIHN0cnVjdHVy
ZS4gVGhpcyBpcyBhIEpTQ2VsbCBiZWNhdXNlIHRoYXQgc2ltcGxpZmllcyB0aGUgU3RydWN0dXJl
CisvLyBkZXN0cnVjdG9yIGFuZCBtYWtlcyBsaWZldHlwZSBlYXNpZXIgdG8gbWFuYWdlLiBGb3Ig
ZXhhbXBsZSwgc2luY2UgaXQncyBhIGNlbGwsIHdlIGtub3cgdGhhdCB0aGlzIHRoaW5nCisvLyBj
YW5ub3QgYmUgZGVsZXRlZCB3aGlsZSB0aGUgREZHIGlzIHJ1bm5pbmcuIFRoaXMgaXMgc2VwYXJh
dGUgZnJvbSBQcm9wZXJ0eVRhYmxlIGJlY2F1c2UgbW9zdCBwcm9wZXJ0aWVzCisvLyB3aWxsIG5v
dCBoYXZlIGFuIEluZmVycmVkVHlwZSwgc2luY2UgbW9zdCBwcm9wZXJ0aWVzIGFyZSBpbiBkaWN0
aW9uYXJpZXMgKGlmIHlvdSB0aGluayBvZiAiYSBwcm9wZXJ0eSIKKy8vIGFzIGJlaW5nICJhIHBy
b3BlcnR5IGluIHNvbWUgU3RydWN0dXJlIikuIEFsc28sIHRoaXMgd2lsbCBoYXBwaWx5IGNvbmZs
YXRlIHRoZSB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZyb20KKy8vIGRpZmZlcmVudCBzdHJ1Y3R1cmVz
IGV2ZW4gaWYgdGhlIHN0cnVjdHVyZXMgcmVwcmVzZW50IGRpc2pvaW50IHNldHMgb2Ygb2JqZWN0
cy4KKworY2xhc3MgSW5mZXJyZWRUeXBlVGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEluZmVycmVkVHlw
ZVRhYmxlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFs
IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisK
KyAgICBERUNMQVJFX0lORk87CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIHsgcmV0
dXJuIG1fbG9jazsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV90YWJs
ZS5pc0VtcHR5KCk7IH0KKworICAgIC8vIEdldCB0aGUgY3VycmVudCBpbmZlcnJlZCB0eXBlLiBS
ZXR1cm5zIG51bGxwdHIgZm9yIGJvdGggVG9wIGFuZCBCb3R0b20uIE51bGwgbWVhbnMgQm90dG9t
IGlmIHRoZQorICAgIC8vIG93bmluZyBTdHJ1Y3R1cmUgZG9lc24ndCBrbm93IGFib3V0IHRoZSBw
cm9wZXJ0eS4KKyAgICBJbmZlcnJlZFR5cGUqIGdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChVbmlxdWVkU3Ry
aW5nSW1wbCopOworICAgIEluZmVycmVkVHlwZSogZ2V0KFByb3BlcnR5TmFtZSk7CisKKyAgICBl
bnVtIFN0b3JlZFByb3BlcnR5QWdlIHsKKyAgICAgICAgTmV3UHJvcGVydHksCisgICAgICAgIE9s
ZFByb3BlcnR5CisgICAgfTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVy
cmVkVHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3Rv
cmUuIEl0J3Mgbm90CisgICAgLy8gcmVsZXZhbnQgaWYgaXQncyBUb3AuIE5vdGUgdGhhdCB0aGlz
IHRhYmxlIHdpbGwgaW50ZXJuYWxseSBwcnVuZSBUb3AgZW50cmllcy4KKyAgICBib29sIHdpbGxT
dG9yZVZhbHVlKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBTdG9yZWRQcm9wZXJ0eUFnZSk7
CisKKyAgICAvLyBJbnZhbGlkYXRlcyB0aGUgdHlwZSBmb3IgdGhlIHByb3BlcnR5LiBVc2VmdWwg
aWYgd2UgZGV0ZWN0IGEgc3RvcmUgaW4gYSByZWZsZWN0aXZlIGNvbnRleHQuCisgICAgdm9pZCBt
YWtlVG9wKFZNJiwgUHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSk7CisKK3ByaXZhdGU6
CisgICAgSW5mZXJyZWRUeXBlVGFibGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlVGFibGUoKTsK
KworICAgIC8vIEJvdHRvbTogYWJzZW5jZSBmcm9tIHRhYmxlLgorICAgIC8vIFRvcDogbnVsbCB2
YWx1ZSBpbiB0YWJsZSwgIXZhbHVlLT5pc1JlbGV2YW50KCksIG9yIGFic2VuY2UgZnJvbSB0YWJs
ZS4KKyAgICAvLworICAgIC8vIFdlIGtub3cgaG93IHRvIGRldGVybWluZSBpZiBhYnNlbmNlIGZy
b20gdGhlIHRhYmxlIGlzIGJvdHRvbSBvciB0b3AgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCisg
ICAgLy8gcHJvcGVydHkgaXMgcHJlc2VudCBpbiB0aGUgb3duaW5nIHN0cnVjdHVyZS4gSGVuY2Us
IGRlcGVuZGluZyBvbiB0aGUgc3RydWN0dXJlLCBhYnNlbmNlIG1heSBoYXZlCisgICAgLy8gZGlm
ZmVyZW50IG1lYW5pbmdzLiBUaGUgd2F5IHRoYXQgdGhpcyBjbGFzcyBkZXRlcm1pbmVzIGlmIHRo
ZSBvd25pbmcgc3RydWN0dXJlIGtub3dzIG9mIHRoZSBwcm9wZXJ0eQorICAgIC8vIGlzIHRoYXQg
d2UgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGFjdGlvbnM6IHJlcGxhY2Ugb3IgdHJhbnNpdGlvbi4g
SWYgd2UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5CisgICAgLy8gKHRyYW5zaXRpb24pLCB0aGVu
IGFic2VuY2UgbWVhbnMgYm90dG9tLiBJZiB3ZSdyZSBzdG9yaW5nIHRvIGFuIGV4aXN0aW5nIHBy
b3BlcnR5IChyZXBsYWNlLCB0aGVuCisgICAgLy8gYWJzZW5jZSBtZWFucyB0b3AuIFRvIG1ha2Ug
dGhpcyB3b3JrLCB3ZSBoYXZlIHRvIHdhdGNoIG91dCBmb3IgdGhlIGNhc2Ugd2hlcmUgdHdvIHN0
cnVjdHVyZXMsIFMxIGFuZAorICAgIC8vIFMyLCBzaGFyZSB0aGUgc2FtZSBJbmZlcnJlZFR5cGVU
YWJsZSBhbmQgbmVpdGhlciBvZiB0aGVtIGluaXRpYWxseSBrbm93IGFib3V0IHByb3BlcnR5IFAu
IFMxIG1heQorICAgIC8vIHdhbnQgdG8gYWRkIFAgd2l0aG91dCBhIHR5cGUsIHdoaWxlIFMyIG1h
eSB3YW50IHRvIGFkZCBQIHdpdGggYSB0eXBlLiBJZiBTMSBhZGRlZCBQIGFuZCB1c2VkIGFic2Vu
Y2UKKyAgICAvLyB0byBpbmRpY2F0ZSBUb3AsIHRoZW4gUzIgd291bGQgdXNlIHRoYXQgYWJzZW5j
ZSB0byBtZWFuIEJvdHRvbSBhbmQgd291bGQgZW5kIHVwIGNyZWF0aW5nIGEgbm9uLVRvcAorICAg
IC8vIGVudHJ5IGluIHRoZSB0YWJsZS4gVGhlbiBTMSB3b3VsZCBmb3JnZXQgdGhhdCBpdCB3YW50
ZWQgVG9wLCBhbmQgd291bGQgdXNlIFMyJ3MgdHlwZS4gQ2xlYXJseSwKKyAgICAvLyB0aGF0J3Mg
YmFkLiBXZSBhdm9pZCBzdWNoIGNvbmZ1c2lvbiBieSBlbnN1cmluZyB0aGF0IGEgdHJhbnNpdGlv
biBhbHdheXMgYWRkcyBhbiBlbnRyeS4gSGVuY2UsCisgICAgLy8gYWJzZW5jZS1tZWFucy1ib3R0
b20gb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIHByb3BlcnRpZXMgYWRkZWQgYmVmb3JlIHRoZSBJ
bmZlcnJlZFR5cGVUYWJsZSB3YXMKKyAgICAvLyBjcmVhdGVkLgorICAgIHR5cGVkZWYgSGFzaE1h
cDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPiwg
SWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8VW5pcXVlZFN0cmluZ0ltcGwqPj4gVGFibGVU
eXBlOworICAgIAorICAgIFRhYmxlVHlwZSBtX3RhYmxlOworCisgICAgLy8gV2Ugb25seSBncmFi
IHRoaXMgbG9jayB3aGVuIHdlJ3JlIGRvaW5nIG1vZGlmaWNhdGlvbnMgb24gdGhlIG1haW4gdGhy
ZWFkLCBvciByZWFkcyBvbiB0aGUgY29tcGlsZXIKKyAgICAvLyB0aHJlYWQuIFRoZSBjb21waWxl
ciB0aHJlYWQgaXMgbm90IGFsbG93ZWQgdG8gZG8gbW9kaWZpY2F0aW9ucy4KKyAgICBDb25jdXJy
ZW50SklUTG9jayBtX2xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEluZmVycmVkVHlwZVRhYmxlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExODksNiArMTE4OSw4IEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJyZWRU
eXBlcygpKTsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwog
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxp
ZE9mZnNldCkgewpAQCAtMTIyNywyOSArMTIyOSw0MCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6
ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwotICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUo
CisgICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwor
ICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVW
YWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgCiAg
ICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0g
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0g
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0
KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0
KSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVy
ZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsK
ICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRl
cyk7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7
CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9
PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5
KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAgICAgICAg
ICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgfQorCiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQ
cm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFs
dWUpOwogCkBAIC0xMjY4LDE2ICsxMjgxLDE5IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbnRlcm5hbCgKICAgICAvLyB3ZSB3YW50LgogICAgIERlZmVycmVkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7CiAgICAgCi0gICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVm
ZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb24oCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZp
cmUpOworICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAg
ICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpQdXRCeUlkKTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgc2V0U3RydWN0
dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKKyAgICBB
U1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIHNldFN0cnVj
dHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0cnVjdHVyZSk7CiAK
ICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIHNsb3Quc2V0TmV3UHJvcGVy
dHkodGhpcywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAg
ICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAgIG5l
d1N0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTMzNSw4ICsxMzUxLDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpw
dXREaXJlY3RXaXRob3V0VHIKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9y
YWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5l
d091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+
c3RydWN0dXJlKCk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwor
ICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICBzdHJ1Y3R1cmUtPndpbGxTdG9y
ZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1p
emUpOworICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUwLDExICszNTAsMTUgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlNYXAoVgogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdGhpcywgdGFibGUpOwogCisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVUYWJsZSA9IG1f
aW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisKICAgICBmb3IgKHNpemVfdCBpID0gc3RydWN0dXJl
cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUlu
UHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRl
c0luUHJldmlvdXMoKSk7CisgICAgICAgIGlmICh0eXBlVGFibGUgJiYgdHlwZVRhYmxlLT5nZXQo
c3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpKSkKKyAgICAgICAgICAgIGVudHJ5Lmhh
c0luZmVycmVkVHlwZSA9IHRydWU7CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5
LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsK
ICAgICB9CiAgICAgCkBAIC00NjQsNiArNDY4LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3Vz
KGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRy
YW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0p
KTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CisgICAg
dHJhbnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAKICAgICBvZmZzZXQg
PSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAKQEAgLTQ3
OSw2ICs0ODQsMjQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAog
CiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
T2Zmc2V0JiBvZmZzZXQpCiB7CisgICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUgZ29vZCByZWFz
b25zIHdoeSB0aGlzIGdvZXMgZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeSByYXRo
ZXIgdGhhbgorICAgIC8vIGNhY2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXggYWxsIG9mIHRo
ZXNlIHRoaW5ncywgYnV0IHdlIG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdlIGV2ZXIgdHJ5
CisgICAgLy8gdG8gb3B0aW1pemUgdGhpcyBjYXNlLgorICAgIC8vCisgICAgLy8gLSBDYWNoZWQg
dHJhbnNpdGlvbnMgdXN1YWxseSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFuZCBhc3N1bWUg
dGhhdCB0aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgdGhleQorICAgIC8vICAgY2FuIGp1c3QgcmVi
dWlsZCB0aGUgdGFibGUgYnkgbG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBUaGF0IGNvZGUg
YXNzdW1lcyB0aGF0IHRoZSB0YWJsZSBvbmx5CisgICAgLy8gICBncmV3IGFuZCBuZXZlciBzaHJh
bmsuIFRvIHN1cHBvcnQgcmVtb3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIHByb3BlcnR5
IHRhYmxlIG1hdGVyaWFsaXphdGlvbgorICAgIC8vICAgY29kZSB0byBoYW5kbGUgZGVsZXRpb25z
LiBBbHNvLCB3ZSBoYXZlIGxvZ2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG9uIGEg
c3RydWN0dXJlIHRoYXQKKyAgICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUgYnkganVzdCBs
b29raW5nIGJhY2sgdGhyb3VnaCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNlIHRoZSBsYXN0
CisgICAgLy8gICBzdHJ1Y3R1cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMg
d291bGQgYWxzbyBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAorICAgIC8vICAg
cmVtb3ZhbHMuCisgICAgLy8KKyAgICAvLyAtIEluZmVycmVkVHlwZVRhYmxlIGFzc3VtZXMgdGhh
dCByZW1vdmFsIGhhcyBuZXZlciBoYXBwZW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgaWYg
d2UgY291bGQKKyAgICAvLyAgIHJlbW92ZSBhIHByb3BlcnR5IGFuZCB0aGVuIHJlLWFkZCBpdCBs
YXRlciwgdGhlbiB0aGUgImFic2VuY2UgbWVhbnMgdG9wIiBvcHRpbWl6YXRpb24gd291bGRuJ3QK
KyAgICAvLyAgIHdvcmsgYW55bW9yZSwgdW5sZXNzIHJlbW92YWwgYWxzbyBlaXRoZXIgcG9pc29u
ZWQgdHlwZSBpbmZlcmVuY2UgKGJ5IGRvaW5nIHNvbWV0aGluZyBlcXVpdmFsZW50IHRvCisgICAg
Ly8gICBoYXNCZWVuRGljdGlvbmFyeSkgb3IgYnkgc3Ryb25nbHkgbWFya2luZyB0aGUgZW50cnkg
YXMgVG9wIGJ5IGVuc3VyaW5nIHRoYXQgaXQgaXMgbm90IGFic2VudCwgYnV0CisgICAgLy8gICBp
bnN0ZWFkLCBoYXMgYSBudWxsIGVudHJ5LgorICAgIAogICAgIEFTU0VSVCghc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9
IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKQEAgLTg0
MSw2ICs4NjQsNDMgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFBybwog
ICAgIHNldERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKHRydWUpOwogfQogCit2b2lkIFN0cnVj
dHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAorICAgIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSwKKyAgICBJbmZlcnJl
ZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIEFTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09
IGluZm8oKSk7CisgICAgQVNTRVJUKCFoYXNCZWVuRGljdGlvbmFyeSgpKTsKKworICAgIC8vIENy
ZWF0ZSB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwg
c28gdGhhdCB3ZSBkb24ndCBHQyBhZnRlciB3ZSBoYXZlIGFscmVhZHkKKyAgICAvLyBncmFiYmVk
IGEgcG9pbnRlciBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuCisgICAgSW5mZXJyZWRUeXBlVGFibGUq
IHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKyAgICBpZiAoIXRhYmxlKSB7Cisg
ICAgICAgIHRhYmxlID0gSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1faW5mZXJyZWRUeXBlVGFibGUuc2V0KHZt
LCB0aGlzLCB0YWJsZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3Zl
IGdvdCBhIHByb3BlcnR5IHRhYmxlLgorICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7
CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxl
KTsKKworICAgIC8vIFdlIG11c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVhdGVk
IHRoZSBnaXZlbiBwcm9wZXJ0eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMgcHJlc2VudAorICAg
IC8vIGFscmVhZHksIHNvIHdlIG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxlIG5vdy4KKyAgICBB
U1NFUlQocHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyAuLi4gYW5kIHRoZSBwcm9wZXJ0eSBtdXN0
IGJlIHByZXNlbnQuCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxl
LT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBBU1NFUlQoZW50cnkpOworCisgICAgaWYg
KHNob3VsZE9wdGltaXplKQorICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gdGFibGUt
PndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2UpOworICAgIGVsc2Ug
eworICAgICAgICB0YWJsZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lLCBhZ2UpOworICAgICAg
ICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gZmFsc2U7CisgICAgfQorfQorCiAjaWYgRFVNUF9Q
Uk9QRVJUWU1BUF9TVEFUUwogCiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBwcm9wZXJ0eU1h
cEhhc2hUYWJsZVN0YXRzID0gMDsKQEAgLTEwNTgsNiArMTExOCw4IEBAIHZvaWQgU3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CiAgICAgfSBlbHNlIGlmICh0aGlzT2JqZWN0
LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlU
YWJsZVVuc2FmZS5jbGVhcigpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
aW5mZXJyZWRUeXBlVGFibGUpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAx
ODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2lu
Y2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisj
aW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC04MSwxMSArODIsMTMg
QEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBrZXk7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmlidXRlczsKKyAg
ICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBvciBub3QgYSBw
cm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSwg
YW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtleShudWxscHRyKQog
ICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoMCkK
KyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAg
LTkzLDYgKzk2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgICAgICA6IGtleShr
ZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpAQCAtMzIzLDYg
KzMyNyw3IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5
TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcyk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsKIAogICAgIC8v
IFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwgY2FsbCB5b3Vy
IGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1Y3R1cmUncyBs
b2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBoZWxkIG9yIG5v
dCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNDgxLDYgKzQ4Niw0MCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2Fy
eSh2bSk7CiAgICAgfQogCisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhIW1faW5mZXJyZWRUeXBlVGFibGU7CisgICAgfQorCisgICAgSW5m
ZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7
CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRh
YmxlLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlLT5nZXQodWlkKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGlu
ZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7Cisg
ICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IGluZmVycmVkVHlwZUZvcih1aWQpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZGVzY3JpcHRvcigpOworICAgICAgICByZXR1cm4g
SW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxT
dG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQorICAgIHsKKyAg
ICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRpbWl6ZSAmJiAhbV9p
bmZlcnJlZFR5cGVUYWJsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdpbGxTdG9y
ZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIEluZmVy
cmVkVHlwZVRhYmxlOjpOZXdQcm9wZXJ0eSk7CisgICAgfQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCB3aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgIFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSkKKyAgICB7
CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3Vs
ZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6T2xkUHJvcGVydHkpOworICAgIH0KKwogICAg
IFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSk7CiAg
ICAgCiAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgbWF0Y2ggZW5vdWdo
IHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMKQEAgLTYzMiw2ICs2
NzEsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRXYXRjaGluZ0ludGVybmFsUHJv
cGVydGllcyhWTSYpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3aWxsU3RvcmVWYWx1
ZVNsb3coCisgICAgICAgIFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sLCBJbmZlcnJl
ZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOworCiAgICAgc3RhdGljIGNvbnN0IGludCBz
X21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJh
bnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCkBAIC02NTUsNiArNjk3LDgg
QEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9wZXJ0eVRh
YmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgog
ICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiAK
KyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFibGU+IG1faW5mZXJyZWRUeXBlVGFibGU7
CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IDwgMjU2LCBm
aXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03NSwxOSArNzUsMTkgQEAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpz
dG9yZWRQcm90bwogCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQoIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkpOwotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKLSAgICBpZiAo
IXByb3BlcnR5VGFibGUpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJv
cGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVp
ZCgpKTsKLSAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxpZE9mZnNldDsK
KyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAg
IHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBl
KTsKIH0KICAgICAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykK
IHsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Cit9CisKK0FMV0FZU19JTkxJTkUg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKQorewog
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKQEAgLTEwMSw2ICsxMDEsNyBAQCBBTFdBWVNf
SU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgICAgIHJldHVybiBpbnZhbGlk
T2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOworICAgIGhhc0lu
ZmVycmVkVHlwZSA9IGVudHJ5LT5oYXNJbmZlcnJlZFR5cGU7CiAgICAgcmV0dXJuIGVudHJ5LT5v
ZmZzZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFs
dWUuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2Vl
cGVyLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJJbnRlcnBy
ZXRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0FQSVZhbHVlV3JhcHBl
ci5oIgpAQCAtMjQxLDYgKzI0Miw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBo
ZWFwVHlwZSkKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlU
YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHdlYWtNYXBE
YXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhpcywg
SW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAg
IGluZmVycmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGluZmVycmVkVHlwZVRhYmxlU3RydWN0
dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLnNldCgqdGhpcywg
RnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIGV4Y2VwdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIEV4Y2VwdGlvbjo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4
OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwMiw2ICszMDIsOCBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJv
cGVydHlUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWFrTWFwRGF0YVN0
cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVlU3RydWN0dXJlOwor
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8
U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV4
Y2VwdGlvblN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRT
dHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3At
dHlwZS1vYmplY3QtdGhlbi1zdHJpbmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtb2JqZWN0LXRoZW4tc3RyaW5nLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUt
b2JqZWN0LXRoZW4tc3RyaW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1
bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZiA9PSB7dG9TdHJpbmc6ZnVuY3Rpb24oKSB7
IHJldHVybiAiaGVsbG8iOyB9fTsKK30KKworZnVuY3Rpb24gYmFyKG8sIHYpIHsKKyAgICBvLmYg
PSB2OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKwordmFyIG8gPSB7fTsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKQorICAgIGJhcihvLCB7fSk7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAg
aWYgKHJlc3VsdCAhPT0gZmFsc2UpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsKK30KKworYmFyKG8sICJoZWxsbyIpOwordmFyIHJlc3VsdCA9IGZvbyhvKTsK
K2lmIChyZXN1bHQgIT09IHRydWUpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVu
ZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cHJvcC10eXBlLXN0cmluZy10aGVuLW9iamVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1zdHJpbmctdGhlbi1vYmplY3QuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3At
dHlwZS1zdHJpbmctdGhlbi1vYmplY3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBA
QAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mICsgIiB3b3JsZCI7Cit9CisKK2Z1
bmN0aW9uIGJhcihvLCB2KSB7CisgICAgby5mID0gdjsKK30KKworbm9JbmxpbmUoZm9vKTsKK25v
SW5saW5lKGJhcik7CisKK3ZhciBvID0ge307Citmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkK
KyAgICBiYXIobywgImhlbGxvIik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSAiaGVsbG8gd29y
bGQiKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
K2JhcihvLCB7dG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gImhlbGxvIjsgfX0pOwordmFy
IHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gImhlbGxvIHdvcmxkIikKKyAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE4OTkyOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTUtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBKU0Mgc2hvdWxkIGluZmVyIHByb3BlcnR5IHR5cGVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2MTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAgICAg
ICAgKFdURjo6SGFzaFRhYmxlQWRkUmVzdWx0OjpIYXNoVGFibGVBZGRSZXN1bHQpOiBNYWtlIGl0
IHBvc3NpYmxlIHRvIHNheSAiSGFzaE1hcDo6QWRkUmVzdWx0IHJlc3VsdCIgd2l0aG91dCBhc3Np
Z25pbmcgYW55dGhpbmcgdG8gaXQgeWV0LgorICAgICAgICAqIHd0Zi9QcmludFN0cmVhbS5oOgor
ICAgICAgICAoV1RGOjpwcmludEludGVybmFsKTogQmVlZiB1cCBwcmludGluZyBvZiBzb21lIGNv
bW1vbiBXVEYgdHlwZXMsIGluIHBhcnRpY3VsYXIgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPi4K
KwogMjAxNS0wOS0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBBZGQgU2hhZG93Um9vdCBpbnRlcmZhY2UgYW5kIEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNo
YWRvdwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9XVEYv
d3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4g
c3RydWN0IEhhc2hUYWJsZUFkZFJlc3VsdCB7CisgICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdCgp
IDogaXNOZXdFbnRyeShmYWxzZSkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdChJdGVy
YXRvclR5cGUgaXRlciwgYm9vbCBpc05ld0VudHJ5KSA6IGl0ZXJhdG9yKGl0ZXIpLCBpc05ld0Vu
dHJ5KGlzTmV3RW50cnkpIHsgfQogICAgICAgICBJdGVyYXRvclR5cGUgaXRlcmF0b3I7CiAgICAg
ICAgIGJvb2wgaXNOZXdFbnRyeTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTc0LDEyICs3NSwxNCBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgY29uc3QgU3RyaW5nSW1wbCopOwogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVy
bmFsKG91dCwgYml0d2lzZV9jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CiBpbmxp
bmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IFVuaXF1ZWRTdHJp
bmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgYml0d2lzZV9jYXN0PGNvbnN0IFN0
cmluZ0ltcGwqPih2YWx1ZSkpOyB9CitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsJiB2YWx1ZSkgeyBwcmludEludGVybmFs
KG91dCwgJnZhbHVlKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBjaGFyKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgQ1N0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNv
bnN0IENTdHJpbmcmPih2YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIFN0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRpY19j
YXN0PGNvbnN0IFN0cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQs
IHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSB7
IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBBdG9taWNTdHJpbmdJbXBsKj4o
dmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBV
bmlxdWVkU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRpY19jYXN0
PGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQoraW5saW5lIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVbmlxdWVkU3RyaW5nSW1wbCYgdmFsdWUpIHsgcHJp
bnRJbnRlcm5hbChvdXQsICZ2YWx1ZSk7IH0KIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBib29sKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBzaWduZWQgY2hhcik7IC8vIE5PVEU6IHRoaXMgcHJp
bnRzIGFzIGEgbnVtYmVyLCBub3QgYXMgYSBjaGFyYWN0ZXI7IHVzZSBDaGFyYWN0ZXJEdW1wIGlm
IHlvdSB3YW50IHRoZSBjaGFyYWN0ZXIKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsgLy8gTk9URTogc2VlIGFib3ZlLgpA
QCAtMTY5LDYgKzE3MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
Y29uCiAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHZhbHVlLmdldCgpKSk7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgUmVmUHRyPFQ+JiB2YWx1ZSkKK3sKKyAgICBvdXQucHJpbnQocG9pbnRlckR1bXAodmFsdWUu
Z2V0KCkpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGNsYXNzIFZh
bHVlSW5Db250ZXh0IHsKIHB1YmxpYzoK
</data>
<flag name="review"
          id="286630"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261429</attachid>
            <date>2015-09-17 14:39:50 -0700</date>
            <delta_ts>2015-09-17 21:34:59 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>226209</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyOSBA
QAorMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgcHJvcGVydHkgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODYxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGJyaW5ncyByZWN1cnNpdmUgdHlw
ZSBpbmZlcmVuY2UgdG8gSmF2YVNjcmlwdCBvYmplY3QgcHJvcGVydGllcyB0byBKU0MuIFdlIGNo
ZWNrIHRoYXQgYQorICAgICAgICB2YWx1ZSBiZWluZyBzdG9yZWQgaW50byBhIHByb3BlcnR5IG9i
ZXlzIGEgcHJvcGVydHkncyB0eXBlIGJlZm9yZSB3ZSBkbyB0aGUgc3RvcmUuIElmIGl0IGRvZXNu
J3QsCisgICAgICAgIHdlIGJyb2FkZW4gdGhlIHByb3BlcnR5J3MgdHlwZSB0byBpbmNsdWRlIHRo
ZSBuZXcgdmFsdWUuIElmIG9wdGltaXplZCBjb2RlIHdhcyByZWx5aW5nIG9uIHRoZSBvbGQKKyAg
ICAgICAgdHlwZSwgd2UgZGVvcHRpbWl6ZSB0aGF0IGNvZGUuCisKKyAgICAgICAgVGhlIHR5cGUg
c3lzdGVtIHRoYXQgdGhpcyBzdXBwb3J0cyBpbmNsdWRlcyBpbXBvcnRhbnQgcHJpbWl0aXZlIHR5
cGVzIGxpa2UgSW50MzIgYW5kIEJvb2xlYW4uIEJ1dAorICAgICAgICBpdCBnb2VzIGZ1cnRoZXIg
YW5kIGFsc28gaW5jbHVkZXMgYSB0eXBlIGtpbmQgY2FsbGVkIE9iamVjdFdpdGhTdHJ1Y3R1cmUs
IHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAgICAgZXhwZWN0IHRoZSBwcm9wZXJ0eSB0byBhbHdh
eXMgcG9pbnQgdG8gb2JqZWN0cyB3aXRoIGEgcGFydGljdWxhciBzdHJ1Y3R1cmUuIFRoaXMgb25s
eSB3b3JrcyBmb3IKKyAgICAgICAgbGVhZiBzdHJ1Y3R1cmVzIChpLmUuIHN0cnVjdHVyZXMgdGhh
dCBoYXZlIGEgdmFsaWQgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHNldCkuIEludmFsaWRhdGlvbiBv
ZiB0aGUKKyAgICAgICAgdHJhbnNpdGlvbiBzZXQgY2F1c2VzIHRoZSBwcm9wZXJ0eSB0eXBlIHRv
IGJlY29tZSBPYmplY3QgKG1lYW5pbmcgYW4gb2JqZWN0IHdpdGggYW55IHN0cnVjdHVyZSkuCisg
ICAgICAgIFRoaXMgY2FwYWJpbGl0eSBnaXZlcyB1cyByZWN1cnNpdmUgdHlwZSBpbmZlcmVuY2Uu
IEl0J3MgcG9zc2libGUgZm9yIGFuIGV4cHJlc3Npb24gbGlrZSAiby5mLmcuaCIKKyAgICAgICAg
dG8gZXhlY3V0ZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrcyBpZiAuZiBhbmQgLmcgYXJlIGJvdGgg
T2JqZWN0V2l0aFN0cnVjdHVyZS4KKworICAgICAgICBUaGUgdHlwZSBpbmZlcmVuY2Ugb2YgYSBw
cm9wZXJ0eSBpcyB0cmFja2VkIGJ5IGFuIEluZmVycmVkVHlwZSBpbnN0YW5jZSwgd2hpY2ggaXMg
YSBKU0NlbGwuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCBpdCBtYW5hZ2VzIGl0cyBvd24gbWVt
b3J5LiBUaGF0J3MgY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIERGRyBpcyBpbnRl
cmVzdGVkIGluCisgICAgICAgIG9uZSBvZiB0aGVzZSwgaXQgY2FuIGp1c3QgbGlzdCB0aGUgSW5m
ZXJyZWRUeXBlIGFzIGEgd2VhayByZWZlcmVuY2UgaW4gYWRkaXRpb24gdG8gc2V0dGluZyBhCisg
ICAgICAgIHdhdGNocG9pbnQuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBkcm9wcGVkIGJ5IHRoZSBvd25pbmcgc3RydWN0dXJlLCB0aGUgREZHCisgICAgICAg
IHdvbid0IHJlYWQgYSBkYW5nbGluZyBwb2ludGVyLiBBIG1hcHBpbmcgZnJvbSBwcm9wZXJ0eSBu
YW1lIHRvIEluZmVycmVkVHlwZSBpcyBpbXBsZW1lbnRlZCBieQorICAgICAgICBJbmZlcnJlZFR5
cGVUYWJsZSwgd2hpY2ggaXMgYWxzbyBhIEpTQ2VsbC4gRWFjaCBTdHJ1Y3R1cmUgbWF5IHBvaW50
IHRvIHNvbWUgSW5mZXJyZWRUeXBlVGFibGUuCisKKyAgICAgICAgVGhpcyBmZWF0dXJlIGNhdXNl
cyBwcm9ncmFtcyB0byBiZSBoYXBwaWVyIChydW4gZmFzdGVyIHdpdGhvdXQgb3RoZXJ3aXNlIGRv
aW5nIGJhZCB0aGluZ3MgbGlrZQorICAgICAgICB1c2luZyBsb3RzIG9mIG1lbW9yeSkgd2hlbiBm
b3VyIGNvbmRpdGlvbnMgaG9sZDoKKworICAgICAgICAxKSBBIHByb3BlcnR5IGNvbnZlcmdlcyB0
byBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgd2Ugc3VwcG9ydC4KKyAgICAgICAgMikgVGhlIHByb3Bl
cnR5IGlzIGxvYWRlZCBmcm9tIG1vcmUgZnJlcXVlbnRseSB0aGFuIGl0IGlzIHN0b3JlZCB0by4K
KyAgICAgICAgMykgVGhlIHN0b3JlcyBhcmUgYWxsIGNhY2hlZCwgc28gdGhhdCB3ZSBzdGF0aWNh
bGx5IGVtaXQgYSB0eXBlIGNoZWNrLgorICAgICAgICA0KSBXZSBkb24ndCBhbGxvY2F0ZSBhIGxv
dCBvZiBtZXRhLWRhdGEgZm9yIHRoZSBwcm9wZXJ0eSdzIHR5cGUuCisKKyAgICAgICAgV2UgbWF4
aW1pemUgdGhlIGxpa2VsaWhvb2Qgb2YgKDEpIGJ5IGhhdmluZyBhIHJpY2ggdHlwZSBzeXN0ZW0u
IEJ1dCBoYXZpbmcgYSByaWNoIHR5cGUgc3lzdGVtIG1lYW5zCisgICAgICAgIHRoYXQgYSByZWZs
ZWN0aW5nIHB1dCB0byBhIHByb3BlcnR5IGhhcyB0byBoYXZlIGEgbGFyZ2Ugc3dpdGNoIG92ZXIg
dGhlIGluZmVycmVkIHR5cGUgdG8gZGVjaWRlIGhvdworICAgICAgICB0byBkbyB0aGUgdHlwZSBj
aGVjay4gVGhhdCdzIHdoeSB3ZSBuZWVkICgzKS4gV2UgZW5zdXJlICgzKSBieSBoYXZpbmcgZXZl
cnkgcmVmbGVjdGl2ZSBwcm9wZXJ0eQorICAgICAgICBzdG9yZSAoaS5lLiBwdXREaXJlY3RJbnRl
cm5hbCBpbiBhbnkgY29udGV4dCB0aGF0IGlzbid0IFB1dEJ5SWQpIGZvcmNlIHRoZSBpbmZlcnJl
ZCB0eXBlIHRvIGJlY29tZQorICAgICAgICBUb3AuIFdlIGRvbid0IHJlYWxseSB3b3JyeSBhYm91
dCBlbnN1cmluZyAoMik7IHRoaXMgaXMgc3RhdGlzdGljYWxseSB0cnVlIGZvciBtb3N0IHByb2dy
YW1zCisgICAgICAgIGFscmVhZHkuCisKKyAgICAgICAgUHJvYmFibHkgdGhlIG1vc3Qgc3VidGxl
IHRyaWNrZXJ5IGdvZXMgaW50byAoNCkuIExvZ2ljYWxseSB3ZSdkIGxpa2UgdG8gc2F5IHRoYXQg
ZWFjaAorICAgICAgICAoU3RydWN0dXJlLCBQcm9wZXJ0eSkgbWFwcyB0byBpdHMgb3duIEluZmVy
cmVkVHlwZS4gSWYgc3RydWN0dXJlIFMxIGhhcyBhIHRyYW5zaXRpb24gZWRnZSB0byBTMiwKKyAg
ICAgICAgdGhlbiB3ZSBjb3VsZCBlbnN1cmUgdGhhdCB0aGUgSW5mZXJyZWRUeXBlIEkxIHdoZXJl
IChTMSwgUHJvcGVydHkpLT5JMSBoYXMgYSBkYXRhIGZsb3cgY29uc3RyYWludAorICAgICAgICB0
byBJMiB3aGVyZSAoUzIsIFByb3BlcnR5KS0+STIuIFRoYXQgd291bGQgd29yaywgYnV0IGl0IHdv
dWxkIGludm9sdmUgYSBsb3Qgb2YgbWVtb3J5LiBBbmQgd2hlbiBJMQorICAgICAgICBnZXRzIGlu
dmFsaWRhdGVkIGluIHNvbWUgd2F5LCBpdCB3b3VsZCBoYXZlIHRvIHRlbGwgSTIgYWJvdXQgaXQs
IGFuZCB0aGVuIEkyIG1pZ2h0IHRlbGwgb3RoZXIKKyAgICAgICAgSW5mZXJyZWRUeXBlIG9iamVj
dHMgZG93bnN0cmVhbS4gVGhhdCdzIG1hZG5lc3MuIFNvLCB0aGUgZmlyc3QgbWFqb3IgY29tcHJv
bWlzZSB0aGF0IHdlIG1ha2UgaGVyZQorICAgICAgICBpcyB0byBzYXkgdGhhdCBpZiBzb21lIHBy
b3BlcnR5IGhhcyBzb21lIEluZmVycmVkVHlwZSBhdCBzb21lIFN0cnVjdHVyZSwgdGhlbiBhbnl0
aW1lIHdlCisgICAgICAgIHRyYW5zaXRpb24gZnJvbSB0aGF0IFN0cnVjdHVyZSwgdGhlIG5ldyBT
dHJ1Y3R1cmUgc2hhcmVzIHRoZSBzYW1lIEluZmVycmVkVHlwZSBmb3IgdGhhdCBwcm9wZXJ0eS4K
KyAgICAgICAgVGhpcyB1bmlmaWVzIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBvdmVyIHRoZSBl
bnRpcmUgdHJhbnNpdGlvbiB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBTdHJ1Y3R1cmUgYXQKKyAgICAg
ICAgd2hpY2ggdGhlIHByb3BlcnR5IHdhcyBhZGRlZC4gQnV0IHRoaXMgd291bGQgc3RpbGwgbWVh
biB0aGF0IGVhY2ggU3RydWN0dXJlIHdvdWxkIGhhdmUgaXRzIG93bgorICAgICAgICBJbmZlcnJl
ZFR5cGVUYWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGF0IGJlY2F1c2UgZXhwZXJpZW5jZSB3aXRoIFBy
b3BlcnR5VGFibGUgc2hvd3MgdGhhdCB0aGlzIGNhbiBiZQorICAgICAgICBhIG1ham9yIG1lbW9y
eSBob2cuIFNvLCB3ZSBkb24ndCBjcmVhdGUgYW4gSW5mZXJyZWRUeXBlVGFibGUgdW50aWwgc29t
ZW9uZSBhZGRzIGEgcHJvcGVydHkgdGhhdCBpcworICAgICAgICBzdWJqZWN0IHRvIHR5cGUgaW5m
ZXJlbmNlIChpLmUuIGl0IHdhcyBhZGRlZCBub24tcmVmbGVjdGl2ZWx5KSwgYW5kIHdlIHNoYXJl
IHRoYXQgSW5mZXJyZWRUeXBlVGFibGUKKyAgICAgICAgd2l0aCB0aGUgZW50aXJlIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIHRyZWUgcm9vdGVkIGF0IHRoZSBTdHJ1Y3R1cmUgdGhhdCBoYWQgdGhlIGZp
cnN0IGluZmVycmVkCisgICAgICAgIHByb3BlcnR5LiBXZSBhbHNvIGRyb3AgdGhlIEluZmVycmVk
VHlwZVRhYmxlIGFueXRpbWUgdGhhdCB3ZSBkbyBhIGRpY3Rpb25hcnkgdHJhbnNpdGlvbiwgYW5k
IHdlCisgICAgICAgIGRvbid0IGFsbG93IGZ1cnRoZXIgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2Ug
aWYgYSBzdHJ1Y3R1cmUgaGFkIGV2ZXIgYmVlbiBhIGRpY3Rpb25hcnkuCisKKyAgICAgICAgVGhp
cyBpcyBhIDMlIHNwZWVkLXVwIG9uIE9jdGFuZSBhbmQgYSAxMiUgc3BlZWQtdXAgb24gS3Jha2Vu
IG9uIG15IHNldHVwLiBJdCdzIG5vdCBhIHNpZ25pZmljYW50CisgICAgICAgIHNsb3ctZG93biBv
biBhbnkgYmVuY2htYXJrIEkgcmFuLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YnJhbmNoVGVzdDY0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmJyYW5jaFRlc3Q2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
Ojp0ZXN0NjQpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1
dEJ5SWRGbGFncy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5oOgorICAgICAgICAoSlNDOjplbmNvZGVTdHJ1Y3R1cmVJ
RCk6CisgICAgICAgIChKU0M6OmRlY29kZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRWYXJpYW50OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkVmFyaWFudDo6cmVxdWlyZWRUeXBlKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEluc3RydWN0aW9uOjpVbmxpbmtlZElu
c3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChK
U0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKEpTQzo6SW5saW5lV2F0
Y2hwb2ludFNldDo6aXNCZWluZ1dhdGNoZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRD
b25zdGFudFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRC
eUlkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlY3RQdXRCeUlk
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjo6ZmlsdGVyQnlWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVy
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6c2V0VHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9y
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdl
T1NSRW50cnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNUeXBl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6
OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENv
bnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRH
ZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmFkZEJhc2VDaGVjayk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6RGVzaXJlZElu
ZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b3Bl
cmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpleHBlY3RlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjphZGQpOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlND
OjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNp
cmVkSW5mZXJyZWRUeXBlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElu
ZmVycmVkVHlwZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRB
ZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hw
b2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRX
YXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dCk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAg
ICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNoZWQpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1NhZmVUb0xv
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpp
bmZlcnJlZFZhbHVlRm9yUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp0cnlH
ZXRDb25zdGFudENsb3N1cmVWYXIpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmluZmVycmVkVHlwZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkZmcvREZH
SW5mZXJyZWRUeXBlQ2hlY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjppbnNlcnRJ
bmZlcnJlZFR5cGVDaGVjayk6CisgICAgICAgICogZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcm9wZXJ0eVR5
cGVLZXkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpQcm9w
ZXJ0eVR5cGVLZXkpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0
b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpzdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6dWlkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVy
dHlUeXBlS2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Omlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVL
ZXk6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpkZWxldGVkVUlEKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVR5cGVPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b25seVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zm9yRWFjaCk6CisgICAgICAgICogZGZnL0RGR1Vz
ZUtpbmQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcv
REZHVXNlS2luZC5oOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAg
ICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZh
bGlkYXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUNoZWNrQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06Om51bWJlck9yTm90Q2VsbFRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNoZWNrSW5mZXJyZWRUeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU1hY2hpbmVJbnQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRl
Y29kZWRDb2RlTWFwRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJ
Zk5vdFR5cGUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTik6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmJyYW5jaElmRXF1YWwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJy
YW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZD
ZWxsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdE90aGVyKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkludDMyKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdEludDMyKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk51bWJlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6YnJhbmNoSWZOb3ROdW1iZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmRW1wdHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5j
aFN0cnVjdHVyZSk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c206CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SW5mZXJyZWRUeXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6Zm9yRmxhZ3MpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnB1dEJ5SWRGbGFncyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvcjo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJl
bW92ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
c3Vic3VtZXMpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAp
OgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZSk6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6Y2FuV2F0Y2gpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmR1bXApOgorICAgICAgICAoSlNDOjpJ
bmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6bWFrZVRvcFNsb3cpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBl
OjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFR5cGVUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpnZXQpOgorICAgICAg
ICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlw
ZVRhYmxlOjpJbmZlcnJlZFR5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRh
YmxlOjp+SW5mZXJyZWRUeXBlVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmdldCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9wcm9wLXR5cGUtb2JqZWN0LXRoZW4tc3RyaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5y
ZXR1cm4uby5mLnRvU3RyaW5nKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9wcm9wLXR5cGUtc3RyaW5nLXRoZW4tb2JqZWN0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAodG9TdHJpbmcpOgor
CiAyMDE1LTA5LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
MC4wIHNob3VsZCByZWFsbHkgYmUgMC4wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKICAgICBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKyAg
ICBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCiAgICAgZGZnL0RGR0luc2VydGlvblNldC5j
cHAKICAgICBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtNDk2LDYgKzQ5Nyw4IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0lkZW50aWZpZXIu
Y3BwCiAgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9JbmZlcnJlZFZh
bHVlLmNwcAorICAgIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAorICAgIHJ1bnRpbWUvSW5mZXJy
ZWRUeXBlVGFibGUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAg
IHJ1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDI3LDYgKzQyNyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3Jh
cGhTYWZlcG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hl
YXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnNlcnRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAiIC8+
CkBAIC03NDUsNiArNzQ2LDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SWRlbnRpZmllci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
ZGV4aW5nVHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
ZmVycmVkVmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmZlcnJlZFR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmZlcnJlZFR5cGVUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KQEAg
LTExMzIsNiArMTEzNSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1NF
UGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEQ0VQaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkVHJh
bnNpdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVk
V2F0Y2hwb2ludHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaCIgLz4KQEAgLTExNjAsNiArMTE2NCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luZmVycmVkVHlwZUNoZWNrLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5zZXJ0aW9uU2V0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRp
b25QaGFzZS5oIiAvPgpAQCAtMTIxMSw2ICsxMjE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvcGVydHlUeXBlS2V5Lmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
QEAgLTE1ODMsNiArMTU4OSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEluZGV4aW5nSGVhZGVySW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ1R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5mZXJyZWRWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbmZlcnJlZFR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSW5mZXJyZWRUeXBlVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbnQxNkFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEludDMyQXJyYXkuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTI1MSw2ICsxMjUxLDkgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAiPgogICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAiPgorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTg1MSw2ICsxODU0LDgg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGlyZWN0QXJndW1lbnRzLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGlyZWN0QXJndW1lbnRz
T2Zmc2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJy
ZWRWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVy
cmVkVHlwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVy
cmVkVHlwZVRhYmxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
U2NvcGVPZmZzZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxT
Y29wZWRBcmd1bWVudHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxTY29wZWRBcmd1bWVudHNUYWJsZS5jcHAiIC8+CkBAIC0zNjYxLDYgKzM2NjYsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIj4KICAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIj4KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHRGVzaXJlZFRyYW5zaXRpb25zLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTM3MjQsNiArMzczMiw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0luZmVycmVkVHlwZUNoZWNrLmgiPgorICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgiPgogICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQ0MDksNiArNDQyMCw5IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCI+CiAg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb3BlcnR5VHlwZUtleS5oIj4KKyAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRXhpdFByb3BlcnR5VmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ1Miw2ICs0NDY2LDggQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY09mZnNldC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVHlwZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFR5cGVUYWJsZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTY29wZU9mZnNldC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTY29wZWRBcmd1bWVudHMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2NvcGVkQXJndW1lbnRzVGFibGUuaCIgLz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJp
bmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjA3
NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgwMDEw
MjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07CisJ
CTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDExMDY2
MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzOTcx
NEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQxNEJD
RjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBD
b2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4
MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJBOEMz
MjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgz
N0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBGRkI5
MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRC
MDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVE
QiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRo
R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVC
MUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5j
cHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzky
MTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFE
RDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmggKi87IH07CisJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBE
RkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZD
OTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyog
Q29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRj
aHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVm
ZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1
dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xOTE3LDYgKzE5MjUsOCBAQAogCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4
QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcvREZHQ29tYmluZWRMaXZlbmVz
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1QzNCMjE2ODNDRjhGMDBCQUY0
NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcv
REZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29tcGlsYXRpb25FZmZvcnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8q
IEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBBNzUyMTFC
OTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3BwOyBwYXRoID0gbGxpbnQvTExJ
bnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODM5ODE0QkNG
NDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4Niw2ICsyMzk2LDggQEAKIAkJMEZDNzEyRTExN0NE
ODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZl
cnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4NDE2NzFCQThDMzIxMDA2MTgz
N0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5cGVD
aGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM5N0YyRjE4MjAyMEQ3MDAy
QzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjMwMTgyMDIwRDcwMDJDOUIy
NiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZh
bGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Myw2ICsyNTg1LDEwIEBACiAJCTBGRjlDRTcyMUI5Q0Q2
RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZW9mVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJy
ZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5m
ZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIx
MDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZEluZmVy
cmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3Bl
cnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wZXJ0
eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFy
cmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlC
dWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDY1MSw4ICs0NjY3LDggQEAKIAkJCQlCQzAyRTk4QjBFMTgzRTM4MDAwRjky
OTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2MEUxODM5REIwMDBGOTI5NyAv
KiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8q
IEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4
Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24u
Y3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywK
IAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJ
CQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkx
NDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVscGVycy5jcHAgKi8sCkBAIC00
Njg2LDYgKzQ3MDIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhp
bmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIElu
ZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUu
aCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUu
Y3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNw
cCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICov
LAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNw
cCAqLywKQEAgLTQ3MzYsMTAgKzQ3NTYsMTAgQEAKIAkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJQTdCREFFQzQxN0Y0RUEx
NDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTdCREFFQzUxN0Y0RUEx
NDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJCTg2RkE5RThGMTQyQkJCMkQw
MDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJCTg2RkE5RTkwMTQyQkJCMkUw
MDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4QjBGNDI0QjFBQkQ2REUyMDAz
OTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4QjBGNDI0QTFBQkQ2RDJGMDAz
OTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3
M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3
M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JG
MiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpT
Q2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAg
Ki8sCkBAIC01MDQzLDkgKzUwNjMsOSBAQAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAv
KiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3Bw
ICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5oICovLAotCQkJCUZFOTBC
QjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywKIAkJCQlGRTU5MzJBNTE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJCQlGRTU5MzJBNjE4M0M1QTI2
MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIz
RjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcxRTNFMjMwMEJFNzdBNCAvKiBX
YXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9n
LmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLApA
QCAtNTE5Nyw2ICs1MjE3LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZH
RENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZH
RGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8q
IERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMwRjdDQjE3QkJGQzVCMDA0NjRG
RTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJCQlDMkMwRjdDQzE3QkJGQzVC
MDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8sCiAJCQkJMEZFODUzNDkxNzIz
Q0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8sCkBAIC01MjQxLDYg
KzUyNjIsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVw
b2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRp
b24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRp
b24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBl
Q2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIwMDlCNkI0RCAvKiBERkdJbmxp
bmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMwOTU1MDA5QjZCNEQgLyogREZH
SW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3MDREOTAwMTdBMEJBQTgwMDZC
QTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCkBAIC01MjczLDEwICs1Mjk2
LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRl
LmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJD
cmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkwRjU4NzRFQjE5NEZFQjEyMDBB
QUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFCMkMx
IC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZH
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJCTc5RjhGQzFEMUI5RkVEMEYw
MENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovLAorCQkJCTBGNTg3
NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAqLywKKwkJCQkwRjU4NzRFQzE5
NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJCTBGMTcyNUZFMUI0ODcxOUEw
MEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3
MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5NjQw
MDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzQ0LDYgKzUzNjcsNyBAQAogCQkJ
CTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8sCiAJ
CQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNw
cCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlU
eXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5o
ICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHAgKi8sCkBAIC01OTM0LDYgKzU5NTgsNyBAQAogCQkJCUZFNTA2ODY1MUFFMjQ2Mzkw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0NDJD
QjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVu
dmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQg
LyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAz
MTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MDQ3LDYgKzYwNzIsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3Jp
Z2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FT
TUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJF
NzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1Nl
dFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzI2LDEyICs2MzUyLDE0IEBACiAJCQkJ
MEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4NkQx
QSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3MDhC
MDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZC
MUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVk
VHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYg
LyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAw
NUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZF
QzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTcs
NiArNjUyNSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0
aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZDOTIx
NjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzksNiArNzQ2OCw3IEBACiAJCQkJ
MTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENvbnRlbnRTZWFyY2hVdGlsaXRp
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENv
cGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2
NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQUFDRTYzQzE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC03ODE5LDYgKzc4NDksNyBAQAogCQkJCTBGRjA1NEY5MUFDMzVCNDQwMEU1
QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hl
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURGMDkwMTAwRUQ3OTJDIC8qIERG
R01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIwQTNF
OTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC03ODUzLDYgKzc4ODQsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA3NDFCODQy
MUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVy
cmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURGNzYg
LyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTcz
QjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE4NTMsNiArMTg1MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBKdW1wKG1ha2VCcmFuY2goY29uZCkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoVGVzdDY0
KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTY0IG1hc2sp
CisgICAgeworICAgICAgICBtb3ZlKG1hc2ssIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFu
ZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwgcmVnLCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIG1hc2spCiAgICAgewog
ICAgICAgICBsb2FkNjQoYWRkcmVzcywgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52
YWxpZGF0ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjA1LDYgKzYwNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKKyAgICBKdW1w
IGJyYW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0
ZWRJbW02NCBtYXNrKQorICAgIHsKKyAgICAgICAgbW92ZShtYXNrLCBzY3JhdGNoUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIHJlZywgc2NyYXRjaFJlZ2lzdGVy
KTsKKyAgICB9CisKICAgICB2b2lkIHRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxODk5
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTEsNiArNjkxLDE1IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICB9CiAKICAgICBjYXNlIFJlcGxhY2U6IHsKKyAg
ICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVG
b3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIpOwor
ICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgICAg
IGppdC5icmFuY2hJZk5vdFR5cGUoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywgc2Ny
YXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBlcnM6OkRvTm90SGF2ZVRhZ1Jl
Z2lzdGVycykpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRh
TG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChpc0lubGlu
ZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAg
ICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcxNCw2ICs3MjMsMTUgQEAgdm9pZCBBY2Nlc3NDYXNl
OjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdHJ1Y3R1
cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CiAKKyAgICAgICAgaWYgKEluZmVycmVk
VHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgp
KSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
SGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIpOworICAgICAgICAgICAgc3Rh
dGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hJZk5v
dFR5cGUoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlwZS0+
ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBlcnM6OkRvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAg
ICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZl
IHR5cGUuXG4iKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlB1dEJ5
SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0
Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0IEBAIG5hbWVzcGFjZSBXVEYg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmlu
Z091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAgICBpZiAoZmxhZ3MgJiBQdXRC
eUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7
CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7CiAKLSAgICBDU3RyaW5nIHN0
cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkK
LSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJpbnQo
c3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9IEluZmVycmVkVHlwZTo6a2lu
ZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEsIGtpbmQpOworICAgIGlmIChJ
bmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgb3V0LnByaW50KCI6Iiwg
Yml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2
LDcwIEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5lIFB1dEJ5SWRGbGFnc19oCiAK
KyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1lbnVt
IFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGludHB0cl90IHsKICAgICBQdXRC
eUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQorCisgICAgLy8gVGhpcyBmbGFn
IGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0LiBUaGF0IG1lYW5zIHRoYXQg
d2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBjaGVja2luZyBpZiB0aGUgcHJv
dG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlkSXNEaXJlY3QgPSAweDEsCisg
ICAgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCisKKyAgICAvLyBOT1RFOiBUaGUg
dmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQgaXMgaW4gTG93TGV2ZWxJbnRl
cnByZXRlci5hc20uCisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUgcmVxdWlyZWQgaW5mZXJyZWQg
dHlwZSBpbnZvbHZlcyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFyeSB0eXBlIG1hc2ssIGFuZCB0
aGVuCisgICAgLy8gdXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRoZSBtZWFuaW5nIG9mIHRoZSBz
ZWNvbmRhcnkgbWFzazoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBl
TWFzaykgeworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAgIC8v
ICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAgLy8g
ICAgIC4uLgorICAgIC8vICAgICB9CisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2UgUHV0
QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAvLyBjYXNlIFB1dEJ5SWRQ
cmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIC8vICAgICBTdHJ1Y3R1
cmVJRCBzdHJ1Y3R1cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKTsKKyAgICAvLyAgICAg
YnJlYWs7CisgICAgLy8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYsCisgICAg
UHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBOZWVkIHRvIGNoZWNrIHRoZSBz
ZWNvbmRhcnkgdHlwZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJl
IElELgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyID0g
MHg0LCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElELgorCisgICAgUHV0QnlJZFNl
Y29uZGFyeVR5cGVNYXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbSA9
IDB4MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgsCisgICAgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQz
MiA9IDB4MTgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwLAorICAgIFB1
dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU9iamVjdCA9IDB4MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyID0g
MHgzOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4NDAKIH07CiAKK2lubGluZSBQ
dXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJlSUQgaWQpCit7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihzdGF0aWNf
Y2FzdDxQdXRCeUlkRmxhZ3M+KGlkKSA8PCAzKTsKKyNlbHNlCisgICAgUHV0QnlJZEZsYWdzIHJl
c3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKTsKKyAgICBBU1NFUlQoIShyZXN1
bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bmRpZgorfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb2RlU3RydWN0dXJlSUQoUHV0QnlJZEZs
YWdzIGZsYWdzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFN0cnVjdHVyZUlEPihmbGFncyA+PiAzKTsKKyNlbHNlCisgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spOworI2VuZGlm
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJldmlz
aW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAg
ICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJl
LCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsK
ICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CkBAIC0xMDMsNyArMTAzLDggQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgfQogICAgIAotICAgIHJldHVybiBQdXRC
eUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAg
ICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgb2Zmc2V0LCBuZXdT
dHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiB9CiAKIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCkBAIC0xNjIsNyArMTYzLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxm
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIH0KQEAgLTE5Myw3ICsxOTQsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
c2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2YXJpYW50ID0g
UHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
b2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0y
MDYsNyArMjA4LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwog
ICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0
eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0
YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRp
b24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0
cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIGFj
Y2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5pbmZlcnJl
ZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzI5LDggKzMzMiwxMCBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgLy8gU28sIGJl
dHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQorCisgICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCB2YXJpYW50ID0KKyAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9y
Rm9yKHVpZCkpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0zNTYsMTMgKzM2MSwxNiBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAgICAK
ICAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0
dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CisgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1
aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBBU1NFUlQoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQu
YXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0
cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQpKTsKKyAgICAgICAgICAg
IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
dHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAgICAgICAgICAgICAgdHJhbnNp
dGlvbi0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKSk7CiAgICAgICAgIGlmICghZGlk
QXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJp
YW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25l
d1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uZGl0aW9uU2V0ID0g
b3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAg
ICBtX3JlcXVpcmVkVHlwZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBlOwogICAgIGlmIChvdGhlci5t
X2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwogICAgIGVsc2UK
QEAgLTUyLDE4ICs1MywyMSBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlhbnQ6Om9wZXJh
dG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1QdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFu
dDo6cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQorUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBsYWNlOwogICAgIHJlc3VsdC5t
X29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7
CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAog
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQogewogICAgIFB1dEJ5SWRWYXJp
YW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKQEAgLTcxLDYgKzc1
LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogICAgIHJlc3Vs
dC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKICAgICByZXN1bHQubV9jb25kaXRpb25T
ZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgIHJl
c3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC04NSw2ICs5MCw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0
ZXIoCiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogICAgIHJlc3Vs
dC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1cyA9IFdURjo6
bW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gSW5mZXJy
ZWRUeXBlOjpUb3A7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTM0LDkgKzE0MCwxMiBA
QCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiB7CiAgICAgaWYgKG1f
b2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAobV9yZXF1aXJlZFR5cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5cGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkgewotICAgIGNhc2UgUmVwbGFjZToK
KyAgICBjYXNlIFJlcGxhY2U6IHsKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAg
ICAgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKTsKQEAgLTE1OCw2ICsxNjcsNyBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRl
bXB0VG9NZXJnZShjb25zCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVHJhbnNpdGlvbjoKICAg
ICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKQEAgLTIxMCwxNCArMjIwLDE1IEBAIHZvaWQg
UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgCiAgICAgY2FzZSBS
ZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAiPFJlcGxhY2U6ICIsIGlu
Q29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNldCA9ICIsIG9mZnNldCgpLCAi
PiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRleHQoc3RydWN0dXJlKCksIGNv
bnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwgcmVxdWlyZWRUeXBlKCksCisg
ICAgICAgICAgICAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgVHJh
bnNpdGlvbjoKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAi
LCBpbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCiAgICAgICAgICAg
ICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIFsiLAot
ICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250ZXh0KSwgIl0sIG9mZnNl
dCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSwgIl0sIG9mZnNldCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5
cGUoKSwgIj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFNldHRlcjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1Ymxp
YzoKICAgICBQdXRCeUlkVmFyaWFudChjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogICAgIFB1dEJ5
SWRWYXJpYW50JiBvcGVyYXRvcj0oY29uc3QgUHV0QnlJZFZhcmlhbnQmKTsKIAotICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zm
c2V0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVT
ZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAg
ICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCiAgICAgICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCk7
CisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHJvcGVydHlPZmZz
ZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyBQ
dXRCeUlkVmFyaWFudCBzZXR0ZXIoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3Bl
cnR5T2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsCkBAIC05OSw2ICs5
OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKICAgICB9CiAK
KyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgcmVxdWlyZWRUeXBlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3JlcXVpcmVkVHlwZTsKKyAgICB9CisKICAgICBib29sIHdyaXRl
c1N0cnVjdHVyZXMoKSBjb25zdDsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0
OwogICAgIGJvb2wgbWFrZXNDYWxscygpIGNvbnN0OwpAQCAtMTMwLDYgKzEzNSw3IEBAIHByaXZh
dGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsK
KyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9yZXF1aXJlZFR5cGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5j
bHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJQYXJzZXJN
b2Rlcy5oIgotI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogI2luY2x1ZGUgIlJlZ0V4cC5oIgog
I2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaCIKQEAgLTk4LDEyICs5NywxMCBAQCBzdHJ1Y3QgVW5saW5rZWRJbnN0cnVjdGlv
biB7CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbigpIHsgdS5vcGVyYW5kID0gMDsgfQogICAgIFVu
bGlua2VkSW5zdHJ1Y3Rpb24oT3Bjb2RlSUQgb3Bjb2RlKSB7IHUub3Bjb2RlID0gb3Bjb2RlOyB9
CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihpbnQgb3BlcmFuZCkgeyB1Lm9wZXJhbmQgPSBvcGVy
YW5kOyB9Ci0gICAgVW5saW5rZWRJbnN0cnVjdGlvbihQdXRCeUlkRmxhZ3MgZmxhZ3MpIHsgdS5w
dXRCeUlkRmxhZ3MgPSBmbGFnczsgfQogICAgIHVuaW9uIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bj
b2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4Owot
ICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzOwogICAgIH0gdTsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24g
MTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiwzOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICB0b3VjaChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwogICAgIH0KLSAgICAKKworICAgIC8v
IE5vdGUgdGhhdCBmb3IgYW55IHdhdGNocG9pbnQgdGhhdCBpcyB2aXNpYmxlIGZyb20gdGhlIERG
RywgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIHdyaXRlIGNvZGUgbGlrZToKKyAgICAvLworICAg
IC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgpCisgICAg
Ly8KKyAgICAvLyBDb25jdXJyZW50bHkgdG8gdGhpcywgdGhlIERGRyBjb3VsZCBkbzoKKyAgICAv
LworICAgIC8vIGlmICh3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICBwZXJmb3JtIG9wdGlt
aXphdGlvbnM7CisgICAgLy8gaWYgKCF3LmlzU3RpbGxWYWxpZCgpKQorICAgIC8vICAgICByZXRy
eSBjb21waWxhdGlvbjsKKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCB0aGUgREZHIGFsZ29yaXRo
bSBpcyB3aWRlc3ByZWFkLCBhbmQgc291bmQsIGJlY2F1c2UgZmlyZUFsbCgpIGFuZCBpbnZhbGlk
YXRlKCkgd2lsbCBsZWF2ZQorICAgIC8vIHRoZSB3YXRjaHBvaW50IGluIGEgIWlzU3RpbGxWYWxp
ZCgpIHN0YXRlLiBIZW5jZSwgaWYgZmlyZUFsbCgpIG9yIGludmFsaWRhdGUoKSBpbnRlcmxlYXZl
ZCBiZXR3ZWVuCisgICAgLy8gdGhlIGZpcnN0IGlzU3RpbGxWYWxpZCgpIGNoZWNrIGFuZCB0aGUg
c2Vjb25kIG9uZSwgdGhlbiBpdCB3b3VsZCBzaW1wbHkgY2F1c2UgdGhlIERGRyB0byByZXRyeQor
ICAgIC8vIGNvbXBpbGF0aW9uIGxhdGVyLgorICAgIC8vCisgICAgLy8gQnV0LCBpZiB5b3UgY2hh
bmdlIHNvbWUgcGllY2Ugb2Ygc3RhdGUgdGhhdCB0aGUgREZHIG1pZ2h0IG9wdGltaXplIGZvciwg
YnV0IGludmFsaWRhdGUgdGhlCisgICAgLy8gd2F0Y2hwb2ludCBieSBkb2luZzoKKyAgICAvLwor
ICAgIC8vIGlmICh3LmlzQmVpbmdXYXRjaGVkKCkpCisgICAgLy8gICAgIHcuZmlyZUFsbCgpCisg
ICAgLy8KKyAgICAvLyB0aGVuIHRoZSBERkcgd291bGQgbmV2ZXIga25vdyB0aGF0IHlvdSBpbnZh
bGlkYXRlZCBzdGF0ZSBiZXR3ZWVuIHRoZSB0d28gY2hlY2tzLgorICAgIC8vCisgICAgLy8gVGhl
cmUgYXJlIHR3byB3YXlzIHRvIHdvcmsgYXJvdW5kIHRoaXM6CisgICAgLy8KKyAgICAvLyAtIENh
bGwgZmlyZUFsbCgpIHdpdGhvdXQgYSBpc0JlaW5nV2F0Y2hlZCgpIGNoZWNrLiBUaGVuLCB0aGUg
REZHIHdpbGwga25vdyB0aGF0IHRoZSB3YXRjaHBvaW50IGhhcworICAgIC8vICAgYmVlbiBpbnZh
bGlkYXRlZCB3aGVuIGl0IGRvZXMgaXRzIHNlY29uZCBjaGVjay4KKyAgICAvLworICAgIC8vIC0g
RG8gbm90IGV4cG9zZSB0aGUgd2F0Y2hwb2ludCBzZXQgdG8gdGhlIERGRyBkaXJlY3RseSwgYW5k
IGhhdmUgeW91ciBvd24gd2F5IG9mIHZhbGlkYXRpbmcgd2hldGhlcgorICAgIC8vICAgdGhlIGFz
c3VtcHRpb25zIHRoYXQgdGhlIERGRyB0aHJlYWQgdXNlZCBhcmUgc3RpbGwgdmFsaWQgd2hlbiB0
aGUgREZHIGNvZGUgaXMgaW5zdGFsbGVkLgogICAgIGJvb2wgaXNCZWluZ1dhdGNoZWQoKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKGlzRmF0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTQsNyArMjExNCw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0QnkKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8g
bmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gc3RydWN0dXJl
IGNoYWluCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFB1dEJ5SWROb25lKTsgLy8gaXMgbm90
IGRpcmVjdAorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ+KFB1dEJ5
SWROb25lKSk7IC8vIGlzIG5vdCBkaXJlY3QKIAogICAgIHJldHVybiB2YWx1ZTsKIH0KQEAgLTIx
MzYsNyArMjEzNiw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGlyZWMK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIG9mZnNldAogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsgLy8gbmV3IHN0cnVjdHVyZQogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCgwKTsgLy8gc3RydWN0dXJlIGNoYWluICh1bnVzZWQgaWYgZGlyZWN0KQotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCgocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8IHBy
b3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRCeUlk
SXNEaXJlY3QgOiBQdXRCeUlkTm9uZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0YXRp
Y19jYXN0PGludD4oKHB1dFR5cGUgPT0gUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCB8fCBwcm9w
ZXJ0eSAhPSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pID8gUHV0QnlJZElz
RGlyZWN0IDogUHV0QnlJZE5vbmUpKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihUIG5vZGUsIGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0KQorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVj
Tm9uZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoZm9yTm9kZShub2RlKSwgc2V0KTsK
KyAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQsIGFkbWl0dGVkVHlwZXMp
OwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTM5LDcgKzEzOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2RlKSwg
dmFsdWUpOwogICAgIH0KICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFj
dFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0
ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFk
bWl0dGVkVHlwZXMgPSBTcGVjTm9uZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJBcnJh
eU1vZGVzKEFic3RyYWN0VmFsdWUmLCBBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0
IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgU3BlY3VsYXRlZFR5cGUpOwogICAgIEZpbHRyYXRpb25S
ZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODI5LDEwICsxODI5LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVy
ZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpCisgICAgICAgIGlm
ICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpCiAgICAgICAgICAgICAmJiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwp
KSkgewotICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAotICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLCBtX2dy
YXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CisgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV07CisgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IodmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIHVpZCk7CiAg
ICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICAvLyBG
aWd1cmUgb3V0IHdoYXQgdGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSAtIGlzIGl0IFRPUCwgYSBj
b25zdGFudCwgb3IgbWF5YmUKICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBzdWJ0
bGU/CkBAIC0xODQxLDIyICsxODQxLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0aGluZyB3b24ndCBnaXZl
IHVzIGEgdmFyaWFudCB0aGF0IGludm9sdmVzIHByb3RvdHlwZXMuIElmIGl0IGRpZCwgd2UnZAog
ICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIG1vcmUgd29yayB0byBkbyBoZXJlLgogICAgICAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIHN0YXR1c1tpXS5jb25kaXRp
b25TZXQoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
bWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVycmVkVmFsdWVGb3JQ
cm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdWlkLCBzdGF0dXNb
aV0ub2Zmc2V0KCksIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID09IDEg
fHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpID0gcmVz
dWx0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTg4MCw3ICsx
ODcwLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVlLm1f
dHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5
IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVj
dHVyZVNldCgpOwogICAgICAgICAKQEAgLTE4ODgsMTIgKzE4NzcsMjQgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyB0aGF0IGluY2x1ZGVzIHRo
ZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNvdWxkIG1ha2UgdGhlIHN0cnVj
dHVyZSBjaGVjawogICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4gV2UgY3VycmVudGx5IGRvbid0
LgogICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0
KSkgeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKworICAgICAgICBTcGVj
dWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAg
Y2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgICAgICBhZG1pdHRlZFR5cGVzID0gU3BlY05vbmU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAg
ICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjT3RoZXI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFk
IHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGZp
bHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0LCBh
ZG1pdHRlZFR5cGVzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIwODQs
MTMgKzIwODUsMjkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhJiBkYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoZm9yTm9kZShub2RlLT5jaGls
ZDIoKSksIGRhdGEub2Zmc2V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhl
YXBUb3AoKTsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRp
ZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdOworCisgICAgICAgIC8vIEZJWE1FOiBUaGUg
cGFydCBvZiB0aGlzIHRoYXQgaGFuZGxlcyBpbmZlcnJlZCBwcm9wZXJ0eSB0eXBlcyByZWxpZXMg
b24gQUkga25vd2luZyB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIHJpZ2h0IG5vdy4gVGhhdCdz
IHByb2JhYmx5IG5vdCBvcHRpbWFsLiBJbiBzb21lIGNhc2VzLCB3ZSBtYXkgcGVyZm9ybSBhbiBv
cHRpbWl6YXRpb24gKHVzdWFsbHkKKyAgICAgICAgLy8gYnkgc29tZXRoaW5nIG90aGVyIHRoYW4g
QUksIG1heWJlIGJ5IENTRSBmb3IgZXhhbXBsZSkgdGhhdCBvYnNjdXJlcyBBSSdzIHZpZXcgb2Yg
dGhlIHN0cnVjdHVyZQorICAgICAgICAvLyBhdCB0aGUgcG9pbnQgd2hlcmUgR2V0QnlPZmZzZXQg
cnVucy4gQ3VycmVudGx5LCB3aGVuIHRoYXQgaGFwcGVucywgd2UnbGwgaGF2ZSB0byByZWx5IGVu
dGlyZWx5CisgICAgICAgIC8vIG9uIHRoZSB0eXBlIHRoYXQgQnl0ZUNvZGVQYXJzZXIgd2FzIGFi
bGUgdG8gcHJvdmUuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX2dyYXBoLmluZmVy
cmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LCB1aWQsIGRhdGEub2Zmc2V0LCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKwor
ICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNl
ciBjYW1lIHVwIHdpdGggaXMgYmV0dGVyLgorICAgICAgICBBYnN0cmFjdFZhbHVlIHR5cGVGcm9t
UGFyc2luZzsKKyAgICAgICAgdHlwZUZyb21QYXJzaW5nLnNldChtX2dyYXBoLCBkYXRhLmluZmVy
cmVkVHlwZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgIHZhbHVl
LmZpbHRlcih0eXBlRnJvbVBhcnNpbmcpOworCisgICAgICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0
IHRoZXJlIGRvZXMgbm90IGV4aXN0IGFueSB2YWx1ZSB0aGF0IHRoaXMgY2FuIHJldHVybiwgdGhl
biBpdCdzIHByb2JhYmx5CisgICAgICAgIC8vIGJlY2F1c2UgdGhlIGNvbXBpbGF0aW9uIHdhcyBh
bHJlYWR5IGludmFsaWRhdGVkLgorICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKworICAgICAgICBmb3JOb2RlKG5vZGUp
ID0gdmFsdWU7CisgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlKQorICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKQEAgLTIxMjAsNiArMjEzNyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZWZmZWN0IG9uIGNvbXBpbGUgdGlt
ZXMsIGJ1dCB0aGlzIG5vZGUgaXMgRlRMLW9ubHkuCiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CiAgICAgICAgIAorICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
ID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRl
bnRpZmllck51bWJlcl07CisKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OwogICAgICAgICBB
YnN0cmFjdFZhbHVlIHJlc3VsdDsKQEAgLTIxMjksMTggKzIxNDgsMjkgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdl
KHNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChnZXRDYXNlLm1ldGhvZCgpLmtp
bmQoKSAhPSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgc3dpdGNoIChnZXRDYXNlLm1ldGhvZCgpLmtpbmQoKSkgeworICAgICAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6IHsKKyAgICAgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCisgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAgICAgICAgICAgICpnZXRDYXNlLm1l
dGhvZCgpLmNvbnN0YW50KCksCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgdGhpc1Jl
c3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAgICAqZ2V0
Q2FzZS5tZXRob2QoKS5jb25zdGFudCgpLAotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0
dXJlQ2xvYmJlclN0YXRlKCkpOwotICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQp
OworCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOiB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0Lm1lcmdlKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmluZmVy
cmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCwgdWlkLCBt
X3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0gfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuY2hhbmdlU3RydWN0dXJlKG1fZ3JhcGgsIGJhc2VTZXQpID09IENvbnRyYWRpY3Rp
b24pCkBAIC0yMTYzLDYgKzIxOTMsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAg
ICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlID0gZm9yTm9kZShub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0aW5nVmFsdWU7CiAgICAgICAg
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwpA
QCAtMjE3MCw2ICsyMjAyLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgIHRoaXNTZXQuZmlsdGVyKGJhc2UpOwogICAgICAgICAgICAgaWYg
KHRoaXNTZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIHRoaXNWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisgICAgICAgICAg
ICB0aGlzVmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOworICAg
ICAgICAgICAgcmVzdWx0aW5nVmFsdWUubWVyZ2UodGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXNTZXQub25seVN0cnVjdHVyZSgpICE9IHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMu
YXBwZW5kKApAQCAtMjE4NSw2ICsyMjIyLDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0
cmFuc2l0aW9ucyk7CiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VT
dHJ1Y3R1cmUobV9ncmFwaCwgbmV3U2V0KSA9PSBDb250cmFkaWN0aW9uKQogICAgICAgICAgICAg
bV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkgPSByZXN1bHRpbmdWYWx1ZTsKKyAgICAgICAgaWYgKCEhb3JpZ2luYWxWYWx1ZSAmJiAhcmVz
dWx0aW5nVmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjI2NCwxMyArMjMwNCwxMyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1
c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICghdmFsdWUubV9zdHJ1
Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkgeworICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewogICAgICAgICAgICAgUHV0
QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAg
ICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAg
ICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKICAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVTZXQgbmV3U2V0OwogICAgICAgICAgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNp
dGlvbnM7CkBAIC0yNjE1LDkgKzI2NTUsOSBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogRmls
dHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zmls
dGVyKAotICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkK
KyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQsIFNwZWN1
bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMpCiB7Ci0gICAgaWYgKHZhbHVlLmZpbHRlcihtX2dyYXBo
LCBzZXQpID09IEZpbHRyYXRpb25PSykKKyAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNl
dCwgYWRtaXR0ZWRUeXBlcykgPT0gRmlsdHJhdGlvbk9LKQogICAgICAgICByZXR1cm4gRmlsdHJh
dGlvbk9LOwogICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgcmV0dXJuIENvbnRy
YWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNTYg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKEdyYXBoJiBncmFwaAogICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgc3dpdGNo
IChkZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Cisg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
Qm9vbGVhbjoKKyAgICAgICAgc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIHNldFR5cGUoU3BlY090aGVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAg
ICAgc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok51bWJlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgc2V0
KGdyYXBoLCBncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAg
c2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
c2V0KGdyYXBoLCBkZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgbWVyZ2UoU3BlY090
aGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6Cisg
ICAgICAgIHNldFR5cGUoZ3JhcGgsIFNwZWNPYmplY3QpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIHNldFR5cGUoZ3JhcGgs
IFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6OlRvcDoKKyAgICAgICAgbWFrZUhlYXBUb3AoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQWJz
dHJhY3RWYWx1ZTo6c2V0KAorICAgIEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRl
KQoreworICAgIHNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgaWYgKGNsb2JiZXJTdGF0ZSA9
PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygpOwor
fQorCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihHcmFwaCYg
Z3JhcGgsIE5vZGVGbGFncyByZXByZXNlbnRhdGlvbiwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
cmVwcmVzZW50YXRpb24gPT0gTm9kZVJlc3VsdERvdWJsZSkgewpAQCAtMTg5LDggKzIzOSwyMiBA
QCBib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHCiAgICAgcmV0dXJuIG9s
ZE1lICE9ICp0aGlzOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRl
cihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCitib29sIEFic3RyYWN0
VmFsdWU6OmlzVHlwZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlKSBjb25zdAogeworICAgIEFic3RyYWN0VmFsdWUgdHlwZVZhbHVlOwor
ICAgIHR5cGVWYWx1ZS5zZXQoZ3JhcGgsIGluZmVycmVkVHlwZSk7CisKKyAgICBBYnN0cmFjdFZh
bHVlIG1lcmdlZFZhbHVlID0gKnRoaXM7CisgICAgbWVyZ2VkVmFsdWUubWVyZ2UodHlwZVZhbHVl
KTsKKworICAgIHJldHVybiBtZXJnZWRWYWx1ZSA9PSB0eXBlVmFsdWU7Cit9CisKK0ZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKAorICAgIEdyYXBoJiBncmFwaCwgY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlciwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKK3sKKyAg
ICBBU1NFUlQoIShhZG1pdHRlZFR5cGVzICYgU3BlY0NlbGwpKTsKKyAgICAKICAgICBpZiAoaXND
bGVhcigpKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwogICAgIApAQCAtMTk4LDcgKzI2
Miw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAvLyBo
YXZpbmcgc3RydWN0dXJlcywgYXJyYXkgbW9kZXMsIG9yIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgIAot
ICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90
eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSB8IGFkbWl0dGVkVHlwZXM7
CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwog
ICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCkBAIC0zMTUsNiArMzc5LDEzIEBA
IEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGMKICAgICByZXR1cm4gQ29u
dHJhZGljdGlvbjsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIo
R3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgQWJzdHJhY3RWYWx1ZSBmaWx0ZXJWYWx1ZTsKKyAgICBmaWx0ZXJWYWx1ZS5zZXQo
Z3JhcGgsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBmaWx0ZXIoZmlsdGVyVmFsdWUpOworfQor
CiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBj
b3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlIGNvbnRyYXZlbmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiCisjaW5j
bHVkZSAiSW5mZXJyZWRUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiU3Bl
Y3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgpAQCAtMjE0LDcgKzIxNSwx
MCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7
CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9Ci0gICAgCisKKyAgICB2b2lkIHNl
dChHcmFwaCYsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworICAgIHZvaWQgc2V0
KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgU3RydWN0dXJlQ2xvYmJl
clN0YXRlKTsKKwogICAgIHZvaWQgZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9k
ZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZml4VHlw
ZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiwgTm9kZSopOwogICAgIApAQCAtMjgwLDE3ICsyODQs
MjcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuICEobV90
eXBlICYgfmRlc2lyZWRUeXBlKTsKICAgICB9CisKKyAgICBib29sIGlzVHlwZShHcmFwaCYsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpIGNvbnN0OworCisgICAgLy8gRmlsdGVycyB0
aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIElmIHRoZSBhZG1pdHRlZFR5
cGVzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQsIHRoaXMKKyAgICAvLyBpbXBsaWNpdGx5IGZpbHRl
cnMgYnkgdGhlIHR5cGVzIGltcGxpZWQgYnkgdGhlIHN0cnVjdHVyZSBzZXQsIHdoaWNoIGFyZSB1
c3VhbGx5IGEgc3Vic2V0IG9mCisgICAgLy8gU3BlY0NlbGwuIEhlbmNlLCBhZnRlciB0aGlzIGNh
bGwsIHRoZSB2YWx1ZSB3aWxsIG5vIGxvbmdlciBoYXZlIGFueSBub24tY2VsbCBtZW1iZXJzLiBC
dXQsIHlvdSBjYW4KKyAgICAvLyB1c2UgYWRtaXR0ZWRUeXBlcyB0byBwcmVzZXJ2ZSBzb21lIG5v
bi1jZWxsIHR5cGVzLiBOb3RlIHRoYXQgaXQncyB3cm9uZyBmb3IgYWRtaXR0ZWRUeXBlcyB0byBv
dmVybGFwCisgICAgLy8gd2l0aCBTcGVjQ2VsbC4KKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
cihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlw
ZXMgPSBTcGVjTm9uZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgm
LCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5
TW9kZXMoQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5W
YWx1ZSYgdmFsdWUpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKGNvbnN0IEFic3RyYWN0
VmFsdWUmKTsKKworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBjaGFu
Z2VTdHJ1Y3R1cmUoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKICAgICBib29s
IGNvbnRhaW5zKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCB2YWxpZGF0ZShK
U1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsOSArMjA2LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIGJvb2wg
aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5h
bEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2Vy
dENoZWNrcyk7Ci0gICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOwot
ICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCosIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0
KTsKKyAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwg
Tm9kZSogdmFsdWUpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
LCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwg
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7
CiAKICAgICAvLyBDcmVhdGUgYSBwcmVzZW5jZSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBiYXNl
ZCBvbiBzb21lIGtub3duIG9mZnNldCBhbmQgc3RydWN0dXJlIHNldC4gRG9lcyBub3QKICAgICAv
LyBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNvbmRpdGlvbiwgYnV0IGl0IG1heSByZXR1cm4g
YSBudWxsIG9uZSBpZiBpdCBlbmNvdW50ZXJzIGEgY29udHJhZGljdGlvbi4KQEAgLTIzMDcsNyAr
MjMwNiw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKKyAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVk
VHlwZSwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlm
IChpc0lubGluZU9mZnNldChvZmZzZXQpKQpAQCAtMjMxOCwxMyArMjMxOSwxNyBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zm
c2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVt
YmVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKKyAgICBtX2dyYXBo
LnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSk7CiAgICAgCiAgICAgTm9kZSogZ2V0
QnlPZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKIAogICAgIHJldHVybiBnZXRCeU9mZnNldDsKIH0K
IAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCitO
b2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoCisgICAgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSwKKyAgICBOb2RlKiB2YWx1ZSkKIHsKICAg
ICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
CkBAIC0yMzM1LDYgKzIzNDAsOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlP
ZmZzZXQoCiAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuYWRkKCk7CiAgICAgZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGRhdGEtPmlk
ZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOworICAgIGRhdGEtPmluZmVycmVkVHlwZSA9IGlu
ZmVycmVkVHlwZTsKKyAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGluZmVycmVkVHlw
ZSk7CiAgICAgCiAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJ
bmZvKGRhdGEpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsKICAgICAKQEAgLTI0NDks
NyArMjQ1Niw4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLmNvbnN0YW50KCkpKTsKICAgICBj
YXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogewogICAgICAgICBOb2Rl
KiBiYXNlTm9kZSA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1ldGhvZC5wcm90b3R5
cGUoKSkpOwotICAgICAgICByZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFz
ZU5vZGUsIGlkZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSwgb3ApOworICAgICAgICBy
ZXR1cm4gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBwcmVkaWN0aW9uLCBiYXNlTm9k
ZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBJbmZlcnJlZFR5cGU6OlRvcCwg
b3ApOwogICAgIH0KICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgogICAgICAgICAv
LyBXaWxsIG5ldmVyIHNlZSB0aGlzIGZyb20gcGxhbkxvYWQoKS4KQEAgLTI1NTUsMTMgKzI1NjMs
MTMgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgCiAgICAgYm9vbCBuZWVkU3Ry
dWN0dXJlQ2hlY2sgPSB0cnVlOwogICAgIAorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CisgICAgCiAgICAgaWYgKEpT
T2JqZWN0KiBrbm93bkJhc2UgPSBiYXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTT2JqZWN0Kj4o
KSkgewogICAgICAgICAvLyBUcnkgdG8gb3B0aW1pemUgYXdheSB0aGUgc3RydWN0dXJlIGNoZWNr
LiBOb3RlIHRoYXQgaXQncyBub3Qgd29ydGggZG9pbmcgYW55dGhpbmcgYWJvdXQgdGhpcwogICAg
ICAgICAvLyBpZiB0aGUgYmFzZSdzIHN0cnVjdHVyZSBpcyB3YXRjaGVkLgogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPmNvbnN0YW50KCktPnN0cnVjdHVyZSgpOwogICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkgewotICAgICAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVy
XTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCF2YXJpYW50LmNvbmRpdGlvblNldCgp
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSBs
b2FkaW5nIGZyb20gYSBwcm90b3R5cGUuIFdlIGV4cGVjdCB0aGUgYmFzZSBub3QgdG8gaGF2ZSB0
aGUKICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eS4gV2UgY2FuIG9ubHkgdXNlIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIGlmIGFsbCBvZiB0aGUgc3RydWN0dXJlcyBpbiB0aGUKQEAgLTI2MjYs
OSArMjYzNCwxOCBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAgICAgICAgIGlm
IChjb25zdGFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29uc3Rh
bnQpOwogICAgICAgICB9CisKKyAgICAgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVy
cmVkVHlwZTsKKyAgICAgICAgaWYgKG5lZWRTdHJ1Y3R1cmVDaGVjaykgeworICAgICAgICAgICAg
Zm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpIHsKKyAg
ICAgICAgICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgdGhpc1R5cGUgPSBtX2dyYXBo
LmluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKTsKKyAgICAgICAgICAgICAg
ICBpbmZlcnJlZFR5cGUubWVyZ2UodGhpc1R5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wOwogICAg
ICAgICAKICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAg
ICAgIGxvYWRQcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNl
dCgpLCBsb2FkT3ApOworICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGluZmVycmVkVHlwZSwgbG9hZE9wKTsKICAgICB9
CiAKICAgICByZXR1cm4gbG9hZGVkVmFsdWU7CkBAIC0yNjM5LDcgKzI2NTYsNyBAQCBOb2RlKiBC
eXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgCiAgICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOwogCiAgICAgY2hlY2tQcmVz
ZW5jZUxpa2UoYmFzZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJdLCB2YXJpYW50
Lm9mZnNldCgpLCB2YXJpYW50LnN0cnVjdHVyZSgpKTsKLSAgICByZXR1cm4gaGFuZGxlUHV0QnlP
ZmZzZXQoYmFzZSwgaWRlbnRpZmllciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOworICAgIHJl
dHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgp
LCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5SWQoCkBAIC0yNzk4LDYgKzI4MTUsOSBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGls
YXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5l
ZFB1dEJ5SWQoKTsKKworICAgICAgICBmb3IgKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50
IDogcHV0QnlJZFN0YXR1cy52YXJpYW50cygpKQorICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3Rl
ckluZmVycmVkVHlwZSh2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgCiAgICAgICAg
IE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211bHRpUHV0QnlPZmZzZXRE
YXRhLmFkZCgpOwogICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5SWRTdGF0dXMudmFyaWFu
dHMoKTsKQEAgLTI4NTQsNiArMjg3NCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5vZmZzZXQgPSB2YXJpYW50Lm9mZnNl
dCgpOwogICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsK
KyAgICAgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gdmFyaWFudC5yZXF1aXJlZFR5cGUoKTsKKyAg
ICAgICAgbV9ncmFwaC5yZWdpc3RlckluZmVycmVkVHlwZShkYXRhLT5pbmZlcnJlZFR5cGUpOwog
ICAgICAgICAKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgIFB1dEJ5T2Zmc2V0LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBA
IGJvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2QKICAgICBjYXNlIFBoYW50
b21DcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9u
OgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIC8vIFRo
ZXNlIGRvIGNsb2JiZXIgbWVtb3J5LCBidXQgbm90aGluZyB0aGF0IGlzIG9ic2VydmFibGUuIEl0
IG1heSBiZSBuaWNlIHRvIHNlcGFyYXRlIHRoZQogICAgICAgICAvLyBoZWFwcyBpbnRvIHRob3Nl
IHRoYXQgYXJlIG9ic2VydmFibGUgYW5kIHRob3NlIHRoYXQgYXJlbid0LCBidXQgd2UgZG9uJ3Qg
ZG8gdGhhdCByaWdodCBub3cuCiAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0luZmVycmVkVHlwZUNoZWNrLmgiCiAjaW5jbHVk
ZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJH
ZXRCeUlkU3RhdHVzLmgiCkBAIC0zNzMsNyArMzc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIHZhcmlhbnQub2xkU3RydWN0dXJlKCkub25seVN0cnVjdHVyZSgpID09
IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQgPSBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zm
c2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5yZXF1aXJlZFR5cGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ0OCw2ICs0NTAsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2Up
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZVZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZh
bHVlIHZhbHVlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOwogCiAgICAg
ICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1c2gg
Q0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAgICAg
ICAgICAgICAgIGFscmVhZHlIYW5kbGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1
bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgpAQCAtNDYzLDcgKzQ2Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0
dXMuaXNTaW1wbGUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm51bVZhcmlhbnRzKCkpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+
IDEgJiYgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQpAQCAtNjQwLDcgKzY0Myw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGNoaWxk
RWRnZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9k
ZSwgRWRnZSBjaGlsZEVkZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKKyAgICB2b2lkIGVtaXRHZXRCeU9mZnNldCgKKyAgICAgICAgdW5zaWduZWQg
aW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBFZGdlIGNoaWxkRWRnZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJl
ZFR5cGU6OkRlc2NyaXB0b3ImIGluZmVycmVkVHlwZSA9IEluZmVycmVkVHlwZTo6VG9wKQogICAg
IHsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAg
CkBAIC02NTYsNiArNjYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEm
IGRhdGEgPSAqbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRh
Lm9mZnNldCA9IG9mZnNldDsKICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRp
Zmllck51bWJlcjsKKyAgICAgICAgZGF0YS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlZFR5cGU7CiAg
ICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChkYXRhLCBwcm9wZXJ0
eVN0b3JhZ2UpOwogICAgIH0KQEAgLTY2NCw4ICs2NzAsMTAgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICBFZGdlIGNo
aWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwotICAgICAgICAKKwogICAgICAgICBhZGRCYXNlQ2hl
Y2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
OworICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LCBpbmRleEluQmxvY2ssIG9yaWdpbiwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCB2YXJp
YW50LnJlcXVpcmVkVHlwZSgpKTsKIAogICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CkBAIC03MzAsNiArNzM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIEFyaXNlcyB3
aGVuIHdlIHBydW5lIE11bHRpR2V0QnlPZmZzZXQuIFdlIGNvdWxkIGhhdmUgYQogICAgICAgICAg
ICAgLy8gTXVsdGlHZXRCeU9mZnNldCB3aXRoIGEgc2luZ2xlIHZhcmlhbnQgdGhhdCBjaGVja3Mg
Zm9yIHN0cnVjdHVyZSBTLAogICAgICAgICAgICAgLy8gYW5kIHRoZSBpbnB1dCBoYXMgc3RydWN0
dXJlcyBTIGFuZCBULCBmb3IgZXhhbXBsZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5vcmln
aW4sCiAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHNldCkp
LCBub2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRJbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisjZGVmaW5lIERGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJJbmZl
cnJlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgZG9jdW1lbnRzIHRoZSBERkcncyBleHBlY3RhdGlv
biBmb3IgYW4gSW5mZXJyZWRUeXBlOiBzcGVjaWZpY2FsbHksIHRoYXQgd2Ugd2FudCBpdCB0byBo
YXZlIGEgbGl2ZQorLy8gSW5mZXJyZWRUeXBlIG9iamVjdCBhbmQgdGhhdCB0aGlzIG9iamVjdCBo
YXMgdGhlIHR5cGUgdGhhdCB3ZSBvcmlnaW5hbGx5IHNhdy4KKworY2xhc3MgRGVzaXJlZEluZmVy
cmVkVHlwZSB7CitwdWJsaWM6CisgICAgRGVzaXJlZEluZmVycmVkVHlwZSgpCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIERlc2lyZWRJbmZlcnJl
ZFR5cGUoSW5mZXJyZWRUeXBlKiBvYmplY3QsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgZXhwZWN0ZWQpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fZXhw
ZWN0ZWQoZXhwZWN0ZWQpCisgICAgeworICAgIH0KKworICAgIERlc2lyZWRJbmZlcnJlZFR5cGUo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fb2JqZWN0KG51bGxw
dHIpCisgICAgICAgICwgbV9leHBlY3RlZChJbmZlcnJlZFR5cGU6OlRvcCkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
ICYmIG1fZXhwZWN0ZWQ7IH0KKworICAgIEluZmVycmVkVHlwZSogb2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3Q7IH0KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgZXhwZWN0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2V4cGVjdGVkOyB9CisKKyAgICBib29sIGlzU3RpbGxWYWxpZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmNhbldhdGNoKG1fZXhwZWN0
ZWQpOworICAgIH0KKworICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIGNvbnN0
CisgICAgeworICAgICAgICBtX29iamVjdC0+YWRkV2F0Y2hwb2ludCh3YXRjaHBvaW50KTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QgPT0gb3RoZXIubV9vYmpl
Y3QKKyAgICAgICAgICAgICYmIG1fZXhwZWN0ZWQgPT0gb3RoZXIubV9leHBlY3RlZDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIW1fb2JqZWN0ICYmIG1fZXhwZWN0ZWQgPT0gSW5mZXJyZWRUeXBlOjpUb3A7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
V1RGOjpQdHJIYXNoPEluZmVycmVkVHlwZSo+OjpoYXNoKG1fb2JqZWN0KSArIG1fZXhwZWN0ZWQu
aGFzaCgpICogNzsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJp
bnQoaW5Db250ZXh0KG1fZXhwZWN0ZWQsIGNvbnRleHQpLCAiIGZvciAiLCBSYXdQb2ludGVyKG1f
b2JqZWN0KSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CisgICAgfQorCitw
cml2YXRlOgorICAgIEluZmVycmVkVHlwZSogbV9vYmplY3Q7CisgICAgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yIG1fZXhwZWN0ZWQ7Cit9OworCitzdHJ1Y3QgRGVzaXJlZEluZmVycmVkVHlwZUhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUm
IGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IERlc2lyZWRJbmZlcnJlZFR5cGUmIGEsIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJy
ZWRUeXBlPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZUhhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsg
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lv
biAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDExIEBAIHZvaWQgQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjoKICAgICB9CiB9CiAKK3ZvaWQgSW5mZXJyZWRUeXBl
QWRhcHRvcjo6YWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRU
eXBlJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3sKKyAgICBrZXkuYWRkKGNvbW1vbi53YXRj
aHBvaW50cy5hZGQoY29kZUJsb2NrKSk7Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJl
ZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2lu
dHMoKSB7IH0KIApAQCAtOTMsNiArOTgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFk
ZExhemlseShjb25zdAogICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFkZExhemlseShrZXkp
OwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0IERlc2lyZWRJ
bmZlcnJlZFR5cGUmIGtleSkKK3sKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkTGF6aWx5KGtleSk7
Cit9CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTEwOCw2
ICsxMTgsNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCCiAgICAg
bV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBt
X2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYWRh
cHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOworICAg
IG1faW5mZXJyZWRUeXBlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0KIAog
Ym9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTE2LDcg
KzEyNyw4IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKICAgICAg
ICAgJiYgbV9pbmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2luZmVycmVk
VmFsdWVzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxs
VmFsaWQoKQotICAgICAgICAmJiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5hcmVTdGlsbFZhbGlk
KCk7CisgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKQor
ICAgICAgICAmJiBtX2luZmVycmVkVHlwZXMuYXJlU3RpbGxWYWxpZCgpOwogfQogCiB2b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKQEAgLTEyNyw2ICsxMzksNyBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6ZHVtcEluQ29udGV4dChQCiAgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdmFs
dWVzOiAiLCBpbkNvbnRleHQobV9pbmZlcnJlZFZhbHVlcywgY29udGV4dCksICJcbiIpOwogICAg
IG91dC5wcmludCgiICAgIEJ1ZmZlciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3Ms
IGNvbnRleHQpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29u
ZGl0aW9uczogIiwgaW5Db250ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwg
IlxuIik7CisgICAgb3V0LnByaW50KCIgICAgSW5mZXJyZWQgdHlwZXM6ICIsIGluQ29udGV4dCht
X2luZmVycmVkVHlwZXMsIGNvbnRleHQpLCAiXG4iKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0
YS5oIgorI2luY2x1ZGUgIkRGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJJbmZl
cnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgpAQCAtOTEsNiArOTIsMTggQEAgc3RydWN0IEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0bwogICAgIH0KIH07CiAKK3N0cnVjdCBJbmZlcnJl
ZFR5cGVBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRGVz
aXJlZEluZmVycmVkVHlwZSYsIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVu
SW52YWxpZGF0ZWQoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFrZXkuaXNTdGlsbFZhbGlkKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYg
a2V5LCBEdW1wQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNv
bnRleHQoa2V5LCBjb250ZXh0KSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgV2F0
Y2hwb2ludFNldFR5cGUsIHR5cGVuYW1lIEFkYXB0b3IgPSBTZXRQb2ludGVyQWRhcHRvcjxXYXRj
aHBvaW50U2V0VHlwZT4+CiBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECkBAIC0xNTksNiArMTcyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBJdCdz
IHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBo
Ojp3YXRjaENvbmRpdGlvbigpLCB3aGljaCBkb2VzCiAgICAgLy8gdGhlIHJlcXVpcmVkIEdDIG1h
Z2ljIGFzIHdlbGwgYXMgc29tZSBvdGhlciBib29ra2VlcGluZy4KICAgICB2b2lkIGFkZExhemls
eShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOworCisgICAgLy8gSXQncyByZWNvbW1l
bmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSBHcmFwaDo6aW5mZXJy
ZWRUeXBlRm9yKCksIHdoaWNoIGRvZXMKKyAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMuCisg
ICAgdm9pZCBhZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYpOwogICAgIAogICAg
IGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CiAgICAgCkBAIC0xODYsNiArMjAzLDEwIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dh
dGNoZWQoa2V5KTsKICAgICB9CisgICAgYm9vbCBpc1dhdGNoZWQoY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRUeXBlcy5pc1dh
dGNoZWQoa2V5KTsKKyAgICB9CiAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwpAQCAtMTk2LDYgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxJbmZlcnJlZFZhbHVlKiwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5mZXJyZWRWYWx1
ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVyVmlldyosIEFy
cmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogICAgIEdlbmVy
aWNEZXNpcmVkV2F0Y2hwb2ludHM8T2JqZWN0UHJvcGVydHlDb25kaXRpb24sIEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzOworICAgIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RGVzaXJlZEluZmVycmVkVHlwZSwgSW5mZXJyZWRUeXBl
QWRhcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBcnJh
eVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCkBA
IC0xMDkyLDYgKzEwOTMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgaW5zZXJ0SW5mZXJyZWRUeXBlQ2hlY2so
CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIG1faW5kZXhJbkJsb2NrLCBub2RlLT5v
cmlnaW4sIG5vZGUtPmNoaWxkMygpLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YSgpLmluZmVycmVkVHlwZSk7CiAgICAgICAgICAgICBzcGVjdWxhdGVGb3JC
YXJyaWVyKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg5OTI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2MSwxMiArMjYxLDE2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0g
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQi
LCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClb
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7CiAgICAgICAgIG91dC5w
cmludCgiLCAiLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNl
dCkpOworICAgICAgICBvdXQucHJpbnQoIiwgaW5mZXJyZWRUeXBlID0gIiwgaW5Db250ZXh0KHN0
b3JhZ2VBY2Nlc3NEYXRhLmluZmVycmVkVHlwZSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAo
bm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZp
ZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLmNhc2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0KSk7CisgICAgICAg
ICAgICBpZiAoZGF0YS5jYXNlc1tpXS5tZXRob2QoKS5raW5kKCkgPT0gR2V0QnlPZmZzZXRNZXRo
b2Q6OkxvYWQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGluZmVycmVkIHZhbHVlID0g
IiwgaW5Db250ZXh0KGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShkYXRhLmNhc2VzW2ldLnNldCgp
LCBpZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0pLCBjb250ZXh0KSwgIikiKTsK
KyAgICAgICAgfQogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEo
KSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCk7CkBAIC04ODcsNiArODkxLDM4IEBAIGJvb2wgR3JhcGg6OmlzU2FmZVRv
TG9hZChKU09iamVjdCogYmFzZSwKICAgICByZXR1cm4gbV9zYWZlVG9Mb2FkLmNvbnRhaW5zKHN0
ZDo6bWFrZV9wYWlyKGJhc2UsIG9mZnNldCkpOwogfQogCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3IgR3JhcGg6OmluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGtleSkKK3sK
KyAgICBhc3NlcnRJc1JlZ2lzdGVyZWQoa2V5LnN0cnVjdHVyZSgpKTsKKyAgICAKKyAgICBhdXRv
IGl0ZXIgPSBtX2luZmVycmVkVHlwZXMuZmluZChrZXkpOworICAgIGlmIChpdGVyICE9IG1faW5m
ZXJyZWRUeXBlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworCisgICAgSW5m
ZXJyZWRUeXBlKiB0eXBlT2JqZWN0ID0ga2V5LnN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3Io
a2V5LnVpZCgpKTsKKyAgICBpZiAoIXR5cGVPYmplY3QpIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5
cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVk
VHlwZTo6VG9wOworICAgIH0KKworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0eXBlRGVz
Y3JpcHRvciA9IHR5cGVPYmplY3QtPmRlc2NyaXB0b3IoKTsKKyAgICBpZiAodHlwZURlc2NyaXB0
b3Iua2luZCgpID09IEluZmVycmVkVHlwZTo6VG9wKSB7CisgICAgICAgIG1faW5mZXJyZWRUeXBl
cy5hZGQoa2V5LCBJbmZlcnJlZFR5cGU6OlRvcCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5
cGU6OlRvcDsKKyAgICB9CisgICAgCisgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIHR5cGVE
ZXNjcmlwdG9yKTsKKworICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodHlwZU9i
amVjdCk7CisgICAgcmVnaXN0ZXJJbmZlcnJlZFR5cGUodHlwZURlc2NyaXB0b3IpOworCisgICAg
Ly8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJlZCBpbmZl
cnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVjdHVyZXMgbWF5CisgICAgLy8gcG9pbnQg
dG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNlLgorICAgIG1fcGxhbi53YXRjaHBvaW50
cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVzY3JpcHRv
cikpOworCisgICAgcmV0dXJuIHR5cGVEZXNjcmlwdG9yOworfQorCiBGdWxsQnl0ZWNvZGVMaXZl
bmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2J5dGVjb2RlTGl2ZW5lc3MuZmluZChjb2RlQmxvY2spOwpAQCAt
MTA2MSw3ICsxMDk3LDcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShK
UwogSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKICAgICBKU1ZhbHVlIGJh
c2UsIGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewotICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXND
bG9iYmVyZWQoKSkgeworICAgIGlmIChzdHJ1Y3R1cmUuaXNJbmZpbml0ZSgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBJZiB3ZSBqdXN0IGNvbnZlcnRlZCB0aGUgb2Zmc2V0IHRvIGEgdWlkLCB3ZSBj
b3VsZCBkbyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbgogICAgICAgICAvLyB3YXRjaGluZyB0byBj
b25zdGFudC1mb2xkIHRoZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI3MQpAQCAtMTA3Niw2ICsxMTEyLDM3IEBAIEpTVmFs
dWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KICAgICByZXR1cm4gdHJ5R2V0Q29u
c3RhbnRQcm9wZXJ0eShiYXNlLm1fdmFsdWUsIGJhc2UubV9zdHJ1Y3R1cmUsIG9mZnNldCk7CiB9
CiAKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7
CisgICAgYmFzZS5mb3JFYWNoKAorICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7
CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICAgICAgdmFsdWUuc2V0
KCp0aGlzLCBpbmZlcnJlZFR5cGVGb3JQcm9wZXJ0eShzdHJ1Y3R1cmUsIHVpZCkpOworICAgICAg
ICAgICAgcmVzdWx0Lm1lcmdlKHZhbHVlKTsKKyAgICAgICAgfSk7CisgICAgaWYgKGNsb2JiZXJT
dGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKQorICAgICAgICByZXN1bHQuY2xvYmJlclN0
cnVjdHVyZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBYnN0cmFjdFZhbHVlIEdyYXBo
OjppbmZlcnJlZFZhbHVlRm9yUHJvcGVydHkoCisgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIFN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgaWYgKEpTVmFsdWUgdmFs
dWUgPSB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UsIG9mZnNldCkpIHsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5zZXQoKnRoaXMsICpmcmVlemUodmFs
dWUpLCBjbG9iYmVyU3RhdGUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IGlmIChiYXNlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpCisgICAgICAgIHJldHVybiBpbmZlcnJl
ZFZhbHVlRm9yUHJvcGVydHkoYmFzZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkLCBjbG9iYmVyU3Rh
dGUpOworCisgICAgcmV0dXJuIEFic3RyYWN0VmFsdWU6OmhlYXBUb3AoKTsKK30KKwogSlNWYWx1
ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVPZmZz
ZXQgb2Zmc2V0KQogewogICAgIC8vIFRoaXMgaGFzIGFuIGF3ZXNvbWUgY29uY3VycmVuY3kgc3Rv
cnkuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIgaW4gQnl0ZUNvZGVQYXJzZXIuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDcgQEAKICNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZH
UGxhbi5oIgogI2luY2x1ZGUgIkRGR1ByZVBvc3ROdW1iZXJpbmcuaCIKKyNpbmNsdWRlICJERkdQ
cm9wZXJ0eVR5cGVLZXkuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJG
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKQEAgLTY3NSw2ICs2
NzYsMjcgQEAgcHVibGljOgogICAgIC8vIENoZWNrcyBpZiBpdCdzIGtub3duIHRoYXQgbG9hZGlu
ZyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBmaW5lLiBUaGlz
IGlzCiAgICAgLy8gY29tcHV0ZWQgYnkgdHJhY2tpbmcgd2hpY2ggY29uZGl0aW9ucyB3ZSB0cmFj
ayB3aXRoIHdhdGNoQ29uZGl0aW9uKCkuCiAgICAgYm9vbCBpc1NhZmVUb0xvYWQoSlNPYmplY3Qq
IGJhc2UsIFByb3BlcnR5T2Zmc2V0KTsKKworICAgIHZvaWQgcmVnaXN0ZXJJbmZlcnJlZFR5cGUo
Y29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorICAgIHsKKyAgICAgICAgaWYg
KHR5cGUuc3RydWN0dXJlKCkpCisgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh0eXBlLnN0
cnVjdHVyZSgpKTsKKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyB3aGF0IGluZmVycmVkIHR5cGUg
d2UgYXJlIGFibGUgdG8gcHJvdmUgdGhlIHByb3BlcnR5IHRvIGhhdmUgbm93IGFuZCBpbiB0aGUg
ZnV0dXJlLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGVGb3IoY29u
c3QgUHJvcGVydHlUeXBlS2V5Jik7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVy
cmVkVHlwZUZvclByb3BlcnR5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVHlwZUZvcihQcm9wZXJ0eVR5
cGVLZXkoc3RydWN0dXJlLCB1aWQpKTsKKyAgICB9CisKKyAgICBBYnN0cmFjdFZhbHVlIGluZmVy
cmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBiYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSBTdHJ1Y3R1cmVz
QXJlV2F0Y2hlZCk7CisKKyAgICAvLyBUaGlzIHVzZXMgZWl0aGVyIGNvbnN0YW50IHByb3BlcnR5
IGluZmVyZW5jZSBvciBwcm9wZXJ0eSB0eXBlIGluZmVyZW5jZSB0byBkZXJpdmUgYSBnb29kIGFi
c3RyYWN0CisgICAgLy8gdmFsdWUgZm9yIHNvbWUgcHJvcGVydHkgYWNjZXNzZWQgd2l0aCB0aGUg
Z2l2ZW4gYWJzdHJhY3QgdmFsdWUgYmFzZS4KKyAgICBBYnN0cmFjdFZhbHVlIGluZmVycmVkVmFs
dWVGb3JQcm9wZXJ0eSgKKyAgICAgICAgY29uc3QgQWJzdHJhY3RWYWx1ZSYgYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7
CiAgICAgCiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKENvZGVCbG9jayop
OwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJbmxpbmVDYWxsRnJhbWUq
KTsKQEAgLTg1Niw2ICs4NzgsNyBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7
CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+
IG1fYnl0ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFByb3Bl
cnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOworICAgIEhhc2hNYXA8UHJvcGVydHlUeXBlS2V5LCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKICAgICBEb21pbmF0b3Jz
IG1fZG9taW5hdG9yczsKICAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsK
ICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHSW5m
ZXJyZWRUeXBlQ2hlY2suaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgaW5z
ZXJ0SW5mZXJyZWRUeXBlQ2hlY2soCisgICAgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHVu
c2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIE5vZGUqIGJhc2VOb2RlLAorICAg
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKK3sKKyAgICBpbnNlcnRpb25T
ZXQuZ3JhcGgoKS5yZWdpc3RlckluZmVycmVkVHlwZSh0eXBlKTsKKyAgICAKKyAgICBzd2l0Y2gg
KHR5cGUua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0
LCBvcmlnaW4pOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9v
bGVhbjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9u
ZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgQm9vbGVhblVzZSkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6CisgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2Uo
YmFzZU5vZGUsIE90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4
LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgSW50MzJVc2UpKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdp
biwgRWRnZShiYXNlTm9kZSwgTnVtYmVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIFN0cmlu
Z1VzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
V2l0aFN0cnVjdHVyZToKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAg
ICAgICAgT3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBlLnN0
cnVjdHVyZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2RlLCBDZWxsVXNlKSk7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAgICAgICAg
T3BJbmZvKGluc2VydGlvblNldC5ncmFwaCgpLmFkZFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVy
ZSgpKSksCisgICAgICAgICAgICBFZGdlKGJhc2VOb2RlLCBDZWxsT3JPdGhlclVzZSkpOworICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2lu
LCBFZGdlKGJhc2VOb2RlLCBPYmplY3RVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUs
IE9iamVjdE9yT3RoZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OlRvcDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERGR19DUkFTSChpbnNl
cnRpb25TZXQuZ3JhcGgoKSwgYmFzZU5vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hl
Y2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJy
ZWRUeXBlQ2hlY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkdJbmZlcnJlZFR5
cGVDaGVja19oCisjZGVmaW5lIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiSW5mZXJy
ZWRUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gSW5zZXJ0
cyBhIHR5cGUgY2hlY2sgdGhhdCBlbnN1cmVzIHRoYXQgYmFzZU5vZGUgaGFzIHRoZSBnaXZlbiBp
bmZlcnJlZCB0eXBlLgordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRp
b25TZXQmLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIE5vZGUqIGJhc2VOb2RlLCBj
b25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdJbmZlcnJl
ZFR5cGVDaGVja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2s7CiBzdHJ1Y3Qg
U3RvcmFnZUFjY2Vzc0RhdGEgewogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyOworCisgICAgLy8gVGhpcyBuZWVkcyB0byBrbm93IHRoZSBp
bmZlcnJlZCB0eXBlLiBGb3IgcHV0cywgdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVk
IHRvIHJlbWVtYmVyCisgICAgLy8gd2hhdCBjaGVjayBpcyBuZWVkZWQuIEZvciBnZXRzLCB0aGlz
IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSBBSSBtaWdodCBmb3JnZXQgd2hhdCB0eXBl
IGlzCisgICAgLy8gZ3VhcmFudGVlZC4KKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5m
ZXJyZWRUeXBlOwogfTsKIAogc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEzNSwxNCArMjEzNSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiBzdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gY3VycmVudE9mZnNldCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvdXIgYW5hbHlzaXMgdHJlYXRz
IE11bHRpUHV0QnlPZmZzZXQgbGlrZSBhbiBlc2NhcGUsIHdlIG9ubHkgaGF2ZSB0bworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZGVhbCB3aXRoIHN0b3JpbmcgcmVzdWx0cyB0aGF0IHdvdWxk
IGhhdmUgYmVlbiBwcmV2aW91c2x5IHN0b3JlZCBieSBQdXRCeU9mZnNldAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbm9kZXMuIFRob3NlIG5vZGVzIHdlcmUgZ3VhcmRlZCBieSB0aGUgYXBw
cm9wcmlhdGUgdHlwZSBjaGVja3MuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgY2FuIHNpbXBseSB0cnVzdCB0aGF0IHRoZSBpbmNv
bWluZyB2YWx1ZSBoYXMgdGhlIHJpZ2h0IHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZvciB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgYXJlIHVzaW5nLgogICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50
U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudE9mZnNldCA9IG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTZXQuY2xlYXIoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgIGRhdGEtPnZh
cmlhbnRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxh
Y2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCwgSW5mZXJyZWRUeXBlOjpUb3ApKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGVydHlUeXBlS2V5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcm9wZXJ0eVR5cGVLZXlfaAorI2Rl
ZmluZSBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgb2JqZWN0IGlzIGEga2V5IGZvciBmaW5k
aW5nIGEgcHJvcGVydHkncyB0eXBlLiBJdCdzIGEgdHVwbGUgb2YgU3RydWN0dXJlKiBhbmQgVW5p
cXVlZFN0cmluZ0ltcGwqLgorCitjbGFzcyBQcm9wZXJ0eVR5cGVLZXkgeworcHVibGljOgorICAg
IFByb3BlcnR5VHlwZUtleSgpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAg
ICAgLCBtX3VpZChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXko
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDog
bV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICB7CisgICAg
fQorCisgICAgUHJvcGVydHlUeXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
KyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1fdWlkKGRlbGV0ZWRV
SUQoKSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlICYmIG1fdWlkOyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQorICAgICAgICAgICAgJiYgbV91aWQg
PT0gb3RoZXIubV91aWQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFByb3Bl
cnR5VHlwZUtleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSAr
IFdURjo6UHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+OjpoYXNoKG1fdWlkKTsKKyAgICB9CisK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhbV9zdHJ1Y3R1cmUgJiYgbV91aWQgPT0gZGVsZXRlZFVJRCgpOworICAgIH0KKwor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcEluQ29udGV4
dChtX3N0cnVjdHVyZSwgY29udGV4dCksICIrIiwgbV91aWQpOworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4
dChvdXQsIG51bGxwdHIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVW5pcXVlZFN0
cmluZ0ltcGwqIGRlbGV0ZWRVSUQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7CisgICAgfQor
ICAgIAorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IG1fdWlkOworfTsKKworc3RydWN0IFByb3BlcnR5VHlwZUtleUhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvcGVydHlUeXBlS2V5JiBhLCBj
b25zdCBQcm9wZXJ0eVR5cGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpQ
cm9wZXJ0eVR5cGVLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OlBy
b3BlcnR5VHlwZUtleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OlByb3BlcnR5
VHlwZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxz
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdQcm9wZXJ0eVR5cGVLZXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg5OTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6
CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAg
ICBjYXNlIENlbGxPck90aGVyVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAg
Y2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToKQEAgLTEyNyw2
ICsxMjgsOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
aWYgKCFzYWZlVG9FeGVjdXRlRWRnZS5yZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgLy8gTk9URTogVGhpcyB0ZW5kcyB0byBsaWUgd2hlbiBpdCBjb21lcyB0byBlZmZlY3Rm
dWwgbm9kZXMsIGJlY2F1c2UgaXQga25vd3MgdGhhdCB0aGV5IGFyZW4ndCBnb2luZyB0bworICAg
IC8vIGdldCBob2lzdGVkIGFueXdheS4KKwogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODk4LDM2ICszODk4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChu
b2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUt
PnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChiYXNlLmdwcigpKSwgMCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrUHRyKAot
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBd
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJl
KHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0
cnVjdHVyZS5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBkb25lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKLSAgICAgICAgICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
c3RydWN0dXJlLmdwcigpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZENhY2hl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwgMCwKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hXZWFrUHRyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZUNo
ZWNrU3RydWN0dXJlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTExLDM4ICszOTExLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChu
b2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgRXhpdEtpbmQg
ZXhpdEtpbmQ7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBleGl0S2luZCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZS5ncHIoKSksIDAsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVj
dHVyZSgKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVT
ZXQoKVswXSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKQotICAgICAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoSklUQ29tcGlsZXI6OkVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwgMCwKLSAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0
cnVjdHVyZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzMiw2ICs1MjMyLDgxIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSoKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShO
b2RlKiBub2RlLCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpCit7CisgICAgQVNTRVJU
KG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CisgICAgCisgICAgaWYgKG5vZGUtPnN0cnVj
dHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAs
CisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdQUlRlbXBvcmFyeT4gc3RydWN0dXJlOworICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSOworICAgICAgICAKKyAgICAgICAgaWYgKHRlbXBHUFIgPT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICAgICAgc3RydWN0dXJlID0gc3RkOjptYWtlX3VuaXF1ZTxHUFJUZW1wb3Jh
cnk+KHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLT5ncHIoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSB0ZW1wR1BSOworICAg
ICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIAor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytp
KSB7CisgICAgICAgICAgICBkb25lLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hXZWFrU3RydWN0dXJlKEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5z
dHJ1Y3R1cmVTZXQoKVtpXSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGNlbGxHUFIpLCAwLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZSgK
KyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZUdQUiwgbm9k
ZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0
cnVjdHVyZShOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CisgICAgY2FzZSBDZWxsVXNlOgorICAgIGNhc2UgS25vd25DZWxsVXNlOiB7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSwgY2VsbC5ncHIoKSwgSW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
ID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNlbGwgPSBtX2ppdC5icmFuY2hJZkNl
bGwodmFsdWVSZWdzKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICB2YWx1
ZVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaElmTm90T3RoZXIodmFsdWVSZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGNlbGwubGluaygm
bV9qaXQpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSwgdmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHQ6
CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CkBAIC01
NjM2LDYgKzU3MTEsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbChFZGdl
IAogICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7CiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKK3sKKyAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
KyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvayA9IG1faml0LmJyYW5jaElmQ2VsbChvcGVyYW5kLmpzVmFsdWVSZWdzKCkpOworICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICBvcGVyYW5kLmpzVmFsdWVSZWdzKCksIGVkZ2UsIFNw
ZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICBtX2ppdC5icmFuY2hJZk5vdE90aGVyKG9wZXJh
bmQuanNWYWx1ZVJlZ3MoKSwgdGVtcEdQUikpOworICAgIG9rLmxpbmsoJm1faml0KTsKK30KKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSkKIHsKICAgICBp
ZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QpKQpAQCAtNTkxNiw2ICs2MDA3LDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2UgQ2Vs
bFVzZToKICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBzcGVjdWxhdGVP
YmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjE1LDYgKzIyMTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51
bGwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzRnVuY3Rpb24oTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZVR5cGVPZihOb2RlKik7CisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9k
ZSosIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUik7CisgICAgdm9pZCBjb21waWxlQ2hl
Y2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92ZVRydWVUbyhHUFJSZWcpOwog
ICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKQEAgLTIzNzQsNiArMjM3Niw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSk7CiAgICAgdm9pZCBzcGVj
dWxhdGVCb29sZWFuKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChFZGdlKTsKKyAgICB2
b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0
KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRnZSk7CiAgICAgdm9pZCBzcGVj
dWxhdGVGaW5hbE9iamVjdChFZGdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDcgKzMxNCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAg
ICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIC8v
IFRoZXNlIGFsbG9jYXRlIGJ1dCB0aGVuIHJ1biB0aGVpciBvd24gYmFycmllci4KLSAgICAgICAg
ICAgICAgICBpbnNlcnRCYXJyaWVyV2l0aEludmFsaWRFeGl0KG1fbm9kZUluZGV4ICsgMSwgRWRn
ZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAg
ICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIEVkZ2UobV9ub2RlLT5jaGlsZDEoKS5u
b2RlKCksIEtub3duQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2go
RXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC00
ODEsMTEgKzQ4MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5k
ZXgsIGJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0QmFycmllcldpdGhJbnZhbGlkRXhp
dCh1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSkKLSAgICB7Ci0gICAgICAgIGluc2VydEJh
cnJpZXIobm9kZUluZGV4LCBiYXNlLCBmYWxzZSk7Ci0gICAgfQotCiAgICAgdm9pZCBpbnNlcnRC
YXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlLCBib29sIGV4aXRPSyA9IHRydWUp
CiAgICAgewogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hvdWxkIG9u
bHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgCisKICAgICAvLyBJbiBtb3N0IGNhc2Vz
LCB3aGF0IHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB2ZXJpZnkgd2hldGhlciB0aGUgc2V0IGlz
IHRvcCBvciBjbG9iYmVyZWQsIGFuZAogICAgIC8vIGlmIG5vdCwgZW51bWVyYXRlIHRoZSBzZXQg
b2Ygc3RydWN0dXJlcy4gVXNlIHRoaXMgb25seSBpbiBjYXNlcyB3aGVyZSB0aGUgc2luZ2xldG9u
IGNhc2UgaXMKICAgICAvLyBtZWFuaW5nZnVsbHkgc3BlY2lhbCwgbGlrZSBmb3IgdHJhbnNpdGlv
bnMuCkBAIC0yMDIsNiArMjAyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gbV9zZXQub25seVN0cnVjdHVyZSgpOwogICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAg
ICAgICBtX3NldC5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw5IEBAIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIEtub3duQ2VsbFVz
ZToKICAgICAgICAgb3V0LnByaW50KCJLbm93bkNlbGwiKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiQ2VsbE9yT3RoZXIiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQo
Ik9iamVjdCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgZW51bSBV
c2VLaW5kIHsKICAgICBLbm93bkJvb2xlYW5Vc2UsCiAgICAgQ2VsbFVzZSwKICAgICBLbm93bkNl
bGxVc2UsCisgICAgQ2VsbE9yT3RoZXJVc2UsCiAgICAgT2JqZWN0VXNlLAogICAgIEZ1bmN0aW9u
VXNlLAogICAgIEZpbmFsT2JqZWN0VXNlLApAQCAtMTA4LDYgKzEwOSw4IEBAIGlubGluZSBTcGVj
dWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICBjYXNlIENlbGxVc2U6CiAgICAgY2Fz
ZSBLbm93bkNlbGxVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIENlbGxP
ck90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGwgfCBTcGVjT3RoZXI7CiAgICAgY2Fz
ZSBPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVjT2JqZWN0OwogICAgIGNhc2UgRnVuY3Rp
b25Vc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAko
cmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw2ICsyNjMsOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzLT5kZmdTaG91bGRXYXRjaCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw2ICs0MTgsNyBAQCBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAg
Y2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAg
ICAgICAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgQ2Vs
bE9yT3RoZXJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgICAg
ICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgICAgICAgICBjYXNlIE9iamVjdE9yT3Ro
ZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjYsMjEgKzIwMjYs
NTcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCiAg
ICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKICAgICAgICAgaWYgKG1fbm9kZS0+
Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENvbnN0
YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7
Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2Vs
bCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKLSAgICAgICAgY2hlY2tT
dHJ1Y3R1cmUoCi0gICAgICAgICAgICBzdHJ1Y3R1cmVJRCwganNWYWx1ZVZhbHVlKGNlbGwpLCBl
eGl0S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgIFt0aGlzXSAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVy
ZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAg
Y2FzZSBLbm93bkNlbGxVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1
cmUoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0
cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5k
LCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJ
RChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY2VsbCBjYXNl
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIG5vdCBjZWxsIGNhc2UiKSk7
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNvbnRpbnVhdGlvbiIpKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICBjaGVja1N0cnVj
dHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwganNWYWx1ZVZhbHVlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICBleGl0
S2luZCwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVj
dHVyZSogc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0
dXJlSUQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2Vs
bENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNO
b3RPdGhlcih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hl
Y2tDZWxsKCkKQEAgLTQwMjIsNiArNDA1OCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9j
a3NbaSArIDFdIDogZXhpdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworCisgICAgICAgICAgICBjaGVja0luZmVy
cmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwogICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CkBAIC01Njc0
LDYgKzU3MTIsMTM1IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBy
ZXN1bHRzKTsKICAgICB9CisKKyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2UgZWRnZSwg
TFZhbHVlIHZhbHVlLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAg
eworICAgICAgICAvLyBUaGlzIGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlwZUNoZWNr
KCkgYmVjYXVzZSBpdCBpcyBjYWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlrZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAgICAgICAv
LworICAgICAgICAvLyBtYXkgYmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNhc2UgNDI6
CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7CisgICAg
ICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
ICAgICBjYXNlIDQzOgorICAgICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwg
dHlwZTIpOworICAgICAgICAvLyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFr
OworICAgICAgICAvLyAgICAgfQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0eXBlMSBh
bmQgdHlwZTIgYXJlIGRpZmZlcmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVhbiB0aGF0
IHRoZSBlZGdlIHdvdWxkIGJlCisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYgdHlwZTIs
IGluc3RlYWQgb2YgdHlwZTEgfCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodHlw
ZS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
bV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVy
cmVkVHlwZTo6T3RoZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
SW50MzI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZS5ub2RlKCksIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLCBpc05vdE51bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdFN0cmlu
Zyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIGlmICghYWJzdHJh
Y3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0
cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRU
eXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNo
ZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RD
ZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSkpIHsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5u
b3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0
cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYg
flNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogewor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2VsbCBjYXNlIikpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNr
SW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJ
bmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAg
IG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY2Vs
bENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOworCisgICAg
ICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RPYmplY3QodmFsdWUs
IHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNl
LCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAg
ICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAg
ICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5TcGVjQ2VsbCkpOwor
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KICAgICAKICAgICBMVmFsdWUgbG9hZFBy
b3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiAgICAgewpAQCAtNzUxNCw2ICs3NjgxLDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICAg
ICAgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIu
bmVlZHNUeXBlQ2hlY2soZWRnZSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTk0LDYgKzc3
NjQsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbG93Q2VsbChlZGdlKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90
aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpc05vdENl
bGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
Tm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNw
ZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2ludGVy
cHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpAQCAtODEyNyw2ICs4MzEzLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmIChmYWlsQ29uZGl0aW9u
ID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBB
U1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmZp
bmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KApAQCAtODEzNSw5ICs4MzI0LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFy
Z3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBl
bmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAgCisKICAgICAgICAgT1NSRXhp
dCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CiAKKyAgICAgICAg
aWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKKyAgICAgICAgICAgIGVt
aXRPU1JFeGl0Q2FsbChleGl0LCBsb3dWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKwogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7CiAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24g
MTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3OCBAQCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgQXNzZW1iCiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5v
dFR5cGUoCisgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVy
cmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlKQor
eworICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgcmVzdWx0OworCisgICAgc3dpdGNoIChk
ZXNjcmlwdG9yLmtpbmQoKSkgeworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEJv
b2xlYW4ocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE90aGVyKHJl
Z3MsIHRlbXBHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
SW50MzI6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdzLCBtb2Rl
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdzLCB0ZW1wR1BSLCBtb2Rl
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ3MucGF5bG9hZEdQUigpKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1
cmU6CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUpKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAg
ICAgICAgICAgICAgICBOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBBZGRyZXNzKHJlZ3MucGF5
bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBv
ayA9IGJyYW5jaElmT3RoZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKHJlZ3MsIG1vZGUpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAg
ICAgICAgICAgIGJyYW5jaFN0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBOb3RFcXVhbCwKKyAg
ICAgICAgICAgICAgICBBZGRyZXNzKHJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpKTsK
KyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwocmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZl
cnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6IHsKKyAgICAgICAgSnVtcCBvayA9IGJyYW5jaElmT3Ro
ZXIocmVncywgdGVtcEdQUik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHJlZ3MsIG1vZGUpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChy
ZWdzLnBheWxvYWRHUFIoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6
cHVyaWZ5TmFOKEZQUlJlZyBmcHIpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFO
ID0gYnJhbmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcHIsIGZwcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1NSwzNyArNTU1LDQ4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEp1
bXAgYnJhbmNoSWZOb3RDZWxsKEdQUlJlZyByZWcpCisgICAgZW51bSBUYWdSZWdpc3RlcnNNb2Rl
IHsKKyAgICAgICAgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzLAorICAgICAgICBIYXZlVGFnUmVnaXN0
ZXJzCisgICAgfTsKKworICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEdQUlJlZyByZWcsIFRhZ1Jl
Z2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0g
SGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDY0KE5vblplcm8sIHJlZywgVHJ1c3RlZEltbTY0KFRhZ01hc2spKTsKICNlbHNlCisgICAg
ICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgcmVnLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwog
I2VuZGlmCiAgICAgfQotICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzIHJlZ3Mp
CisgICAgSnVtcCBicmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJz
TW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChyZWdzLmdwcigpKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaElmTm90Q2VsbChyZWdzLmdwcigpLCBtb2RlKTsKICNlbHNlCi0gICAgICAgIHJl
dHVybiBicmFuY2hJZk5vdENlbGwocmVncy50YWdHUFIoKSk7CisgICAgICAgIHJldHVybiBicmFu
Y2hJZk5vdENlbGwocmVncy50YWdHUFIoKSwgbW9kZSk7CiAjZW5kaWYKICAgICB9CiAgICAgCi0g
ICAgSnVtcCBicmFuY2hJZkNlbGwoR1BSUmVnIHJlZykKKyAgICBKdW1wIGJyYW5jaElmQ2VsbChH
UFJSZWcgcmVnLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAg
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAg
IGlmIChtb2RlID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDY0KFplcm8sIHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIFRydXN0ZWRJbW02NChUYWdNYXNrKSk7CiAjZWxz
ZQorICAgICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KTsKICNlbmRpZgogICAgIH0KLSAgICBKdW1wIGJyYW5jaElmQ2VsbChKU1ZhbHVlUmVncyByZWdz
KQorICAgIEp1bXAgYnJhbmNoSWZDZWxsKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVyc01v
ZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHJldHVybiBicmFuY2hJZkNlbGwocmVncy5ncHIoKSk7CisgICAgICAgIHJldHVybiBi
cmFuY2hJZkNlbGwocmVncy5ncHIoKSwgbW9kZSk7CiAjZWxzZQotICAgICAgICByZXR1cm4gYnJh
bmNoSWZDZWxsKHJlZ3MudGFnR1BSKCkpOworICAgICAgICByZXR1cm4gYnJhbmNoSWZDZWxsKHJl
Z3MudGFnR1BSKCksIG1vZGUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtNjEzLDQzICs2MjQs
NTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIEp1bXAgYnJhbmNoSWZJbnQz
MihKU1ZhbHVlUmVncyByZWdzKQorICAgIEp1bXAgYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyBy
ZWdzLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCBy
ZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBpZiAo
bW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEFi
b3ZlT3JFcXVhbCwgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVncy5ncHIoKSwgVHJ1c3Rl
ZEltbTY0KFRhZ1R5cGVOdW1iZXIpKTsKICNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShtb2Rl
KTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBKdW1w
IGJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICBKdW1wIGJyYW5jaElmTm90
SW50MzIoSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1Jl
Z2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5j
aDY0KEJlbG93LCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwor
ICAgICAgICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaDY0KEJlbG93LCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3csIHJlZ3MuZ3ByKCksIFRydXN0ZWRJ
bW02NChUYWdUeXBlTnVtYmVyKSk7CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9kZSk7
CiAgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAjZW5kaWYKICAgICB9CiAKICAgICAvLyBOb3Rl
IHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4gNjQtYml0IG1vZGUuCi0gICAgSnVtcCBi
cmFuY2hJZk51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICBKdW1w
IGJyYW5jaElmTnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBUYWdSZWdp
c3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICBVTlVTRURfUEFSQU0odGVtcEdQUik7Ci0gICAgICAgIHJldHVybiBicmFu
Y2hUZXN0NjQoTm9uWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCBy
ZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAg
VU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3Mu
dGFnR1BSKCksIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoQmVsb3csIHRlbXBH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7CiAjZW5kaWYKICAgICB9
CiAgICAgCiAgICAgLy8gTm90ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDY0LWJp
dCBtb2RlLgotICAgIEp1bXAgYnJhbmNoSWZOb3ROdW1iZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BS
UmVnIHRlbXBHUFIpCisgICAgSnVtcCBicmFuY2hJZk5vdE51bWJlcihKU1ZhbHVlUmVncyByZWdz
LCBHUFJSZWcgdGVtcEdQUiwgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVy
cykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgVU5VU0VEX1BBUkFNKHRlbXBH
UFIpOwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdS
ZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3By
KCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFu
Y2hUZXN0NjQoWmVybywgcmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpKTsK
ICNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdzLnRhZ0dQUigpLCB0ZW1wR1BSKTsKICAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRh
ZyArIDEpKTsKICNlbmRpZgpAQCAtNzE5LDYgKzc0Miw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH0KIAorICAgIEp1bXBMaXN0IGJyYW5jaElmTm90VHlwZSgKKyAgICAgICAgSlNWYWx1ZVJlZ3Ms
IEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBUYWdSZWdp
c3RlcnNNb2RlKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSnVtcCBicmFuY2hT
dHJ1Y3R1cmUoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIFQgbGVmdEhhbmRTaWRlLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICszNzcsOCBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBwdHJkaWZmX3Qg
b2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSA9IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUg
PT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjpp
c1B0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFRvUGF0Y2hlZFN0b3JhZ2UpCi0gICAgICAg
ICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7
CisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpCisgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9yKGlk
ZW50LmltcGwoKSkpIHsKIAogICAgICAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcygK
ICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzMsNiAr
NjMzLDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAg
ICBwY1s1XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBvZmZzZXQKICAgICAgICAgcGNbNl0udS5w
b2ludGVyID0gbnVsbHB0cjsgLy8gbmV3IHN0cnVjdHVyZQogICAgICAgICBwY1s3XS51LnBvaW50
ZXIgPSBudWxscHRyOyAvLyBzdHJ1Y3R1cmUgY2hhaW4KKyAgICAgICAgcGNbOF0udS5wdXRCeUlk
RmxhZ3MgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihwY1s4XS51LnB1
dEJ5SWRGbGFncyAmIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrKTsKICAgICAgICAgCiAgICAg
ICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtNjYwLDEyICs2NjIs
MTggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBjWzddLnUuc3RydWN0dXJlQ2hhaW4uc2V0KAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
Y2hhaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3Io
aWRlbnQuaW1wbCgpKS5wdXRCeUlkRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKICAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5p
ZCgpOwogICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7CisgICAgICAgICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgPSBzdGF0aWNfY2FzdDxQ
dXRCeUlkRmxhZ3M+KAorICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyB8
CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZv
cihpZGVudC5pbXBsKCkpLnB1dEJ5SWRGbGFncygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29y
a2luZyBjb3B5KQpAQCAtMTM5MCwxNyArMTM5MCw5MSBAQCBfbGxpbnRfb3BfcHV0X2J5X2lkOgog
ICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKICAgICAjIHQyIC0+IGN1cnJlbnRTdHJ1Y3R1
cmVJRAogICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKKyAgICAjIFdlIHdpbGwgbG9zZSBjdXJyZW50
U3RydWN0dXJlSUQgaW4gdGhlIHNoZW5hbmlnYW5zIGJlbG93LgogCisgICAgbG9hZGkgMTJbUENd
LCB0MQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKKyAgICBsb2FkaSAz
MltQQ10sIHQxCisKKyAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6CisgICAgIyB0MCAtPiBv
YmplY3QgYmFzZQorICAgICMgdDEgLT4gcHV0IGJ5IGlkIGZsYWdzCisgICAgIyB0MiAtPiB2YWx1
ZSB0YWcKKyAgICAjIHQzIC0+IHZhbHVlIHBheWxvYWQKKworICAgIGJ0aW56IHQxLCBQdXRCeUlk
UHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZWNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXIKKworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlwZSBjaGVj
a3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRpIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFz
aywgdDEKKyAgICBiaWx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJ
ZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxv
d2luZzogU3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAgIGJpbHQgdDEsIFB1
dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NU
aGFuT2JqZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3RoZXIgb3Ig
VG9wLgorICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRCeUlkRG9u
ZUNoZWNraW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3RoZXIuCisg
ICAgYmllcSB0MiwgQ2VsbFRhZywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorLm9wUHV0QnlJ
ZFR5cGVDaGVja090aGVyOgorICAgIGJpZXEgdDIsIE51bGxUYWcsIC5vcFB1dEJ5SWREb25lQ2hl
Y2tpbmdUeXBlcworICAgIGJpZXEgdDIsIFVuZGVmaW5lZFRhZywgLm9wUHV0QnlJZERvbmVDaGVj
a2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tM
ZXNzVGhhbk9iamVjdE9yT3RoZXI6CisgICAgIyBXZSBhcmUgZWl0aGVyIFN0cmluZyBvciBPYmpl
Y3QuCisgICAgYmluZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5SWRTbG93CisgICAgYmllcSB0MSwg
UHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3QKKyAg
ICBiYmVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgU3RyaW5nVHlwZSwgLm9wUHV0QnlJZERvbmVDaGVj
a2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93Cisub3BQdXRCeUlkVHlwZUNoZWNrT2Jq
ZWN0OgorICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgLm9wUHV0QnlJ
ZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRU
eXBlQ2hlY2tMZXNzVGhhblN0cmluZzoKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2lu
ZzogQm90dG9tLCBCb29sZWFuLCBPdGhlciwgSW50MzIsIE51bWJlci4KKyAgICBiaWx0IHQxLCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQz
MgorCisgICAgIyBXZSBhcmUgZWl0aGVyIEludDMyIG9yIE51bWJlci4KKyAgICBiaWVxIHQxLCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciwgLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcgorCisg
ICAgYmllcSB0MiwgSW50MzJUYWcsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGpt
cCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyOgorICAgIGJpYiB0
MiwgTG93ZXN0VGFnICsgMSwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5v
cFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbkludDMyOgorICAgICMg
V2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyCisgICAg
YmluZXEgdDEsIE9wdEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVj
a0JvdHRvbU9yT3RoZXIKKyAgICBiaWVxIHQyLCBCb29sZWFuVGFnLCAub3BQdXRCeUlkRG9uZUNo
ZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVj
a0JvdHRvbU9yT3RoZXI6CisgICAgYmllcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciwg
Lm9wUHV0QnlJZFR5cGVDaGVja090aGVyCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1
dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICBiaWVxIHQyLCBD
ZWxsVGFnLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZQorICAgIGJ0aW56
IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwgLm9wUHV0
QnlJZFR5cGVDaGVja090aGVyCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRU
eXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlOgorICAgIGFuZGkgUHV0QnlJZFNlY29uZGFyeVR5
cGVNYXNrLCB0MQorICAgIGJpbmVxIHQxLCBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDNdLCAub3BQ
dXRCeUlkU2xvdworCisub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXM6CiAgICAgbG9hZGkgMjRb
UENdLCB0MQogCiAgICAgYnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KIAotICAgICMg
VGhpcyBpcyB0aGUgdHJhbnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0aGUgbmV3IFN0cnVjdHVyZSou
IHQyIGhvbGRzIHRoZSBvbGQgU3RydWN0dXJlKi4KLSAgICAjIElmIHdlIGhhdmUgYSBjaGFpbiwg
d2UgbmVlZCB0byBjaGVjayBpdC4gdDAgaXMgdGhlIGJhc2UuIFdlIG1heSBjbG9iYmVyIHQxIHRv
IHVzZSBpdCBhcwotICAgICMgc2NyYXRjaC4KKyAgICAjIFRoaXMgaXMgdGhlIHRyYW5zaXRpb24g
Y2FzZS4gdDEgaG9sZHMgdGhlIG5ldyBTdHJ1Y3R1cmUqLiBJZiB3ZSBoYXZlIGEgY2hhaW4sIHdl
IG5lZWQgdG8KKyAgICAjIGNoZWNrIGl0LiB0MCBpcyB0aGUgYmFzZS4gV2UgbWF5IGNsb2JiZXIg
dDEgdG8gdXNlIGl0IGFzIHNjcmF0Y2guCiAgICAgbG9hZHAgMjhbUENdLCB0MwogICAgIGJ0cHog
dDMsIC5vcFB1dEJ5SWRUcmFuc2l0aW9uRGlyZWN0CiAKKyAgICBsb2FkaSAxNltQQ10sIHQyICMg
TmVlZCBvbGQgc3RydWN0dXJlIGFnYWluLgogICAgIGxvYWRwIFN0cnVjdHVyZUNoYWluOjptX3Zl
Y3Rvclt0M10sIHQzCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnRwbnogdDMsIG9rIGVuZCkKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY1
LDE0ICsxMjY1LDg4IEBAIF9sbGludF9vcF9wdXRfYnlfaWQ6CiAgICAgd3JpdGVCYXJyaWVyT25P
cGVyYW5kcygxLCAzKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MykKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlQ2VsbCh0MywgdDAsIC5vcFB1dEJ5SWRTbG93KQotICAgIGxvYWRp
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQyCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDQsIHQxKQotICAgIGJpbmVxIHQyLCB0MSwgLm9wUHV0QnlJZFNsb3cKKyAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oNCwgdDIpCisgICAgYmluZXEgdDIsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0
MF0sIC5vcFB1dEJ5SWRTbG93CiAKICAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6Ci0gICAg
IyB0MSwgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKKyAgICAjIHQyIC0+IGN1cnJlbnQgc3Ry
dWN0dXJlIElECiAgICAgIyB0MCAtPiBvYmplY3QgYmFzZQogCisgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDMsIHQxKQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQzKQorCisgICAg
bG9hZHBGcm9tSW5zdHJ1Y3Rpb24oOCwgdDEpCisKKyAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhh
dmU6CisgICAgIyB0MCAtPiBvYmplY3QgYmFzZQorICAgICMgdDEgLT4gcHV0IGJ5IGlkIGZsYWdz
CisgICAgIyB0MiAtPiBjdXJyZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDMgLT4gdmFsdWUgdG8g
cHV0CisKKyAgICBidHBueiB0MSwgUHV0QnlJZFByaW1hcnlUeXBlTWFzaywgLm9wUHV0QnlJZFR5
cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyCisKKyAgICAjIFdlIGhhdmUgb25lIG9m
IHRoZSBub24tc3RydWN0dXJlIHR5cGUgY2hlY2tzLiBGaW5kIG91dCB3aGljaCBvbmUuCisgICAg
YW5kcCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCisgICAgYnBsdCB0MSwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVTdHJpbmcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhblN0cmluZworCisg
ICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IFN0cmluZywgT2JqZWN0LCBPYmplY3RP
ck90aGVyLCBUb3AKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3Ro
ZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbk9iamVjdE9yT3RoZXIKKworICAgICMgV2Ug
YXJlIGVpdGhlciBPYmplY3RPck90aGVyIG9yIFRvcC4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZVRvcCwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisKKyAgICAjIENoZWNr
IGlmIHdlIGFyZSBPYmplY3RPck90aGVyLgorICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tPYmplY3QKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPdGhlcjoKKyAgICBhbmRxIH5U
YWdCaXRVbmRlZmluZWQsIHQzCisgICAgYnFlcSB0MywgVmFsdWVOdWxsLCAub3BQdXRCeUlkRG9u
ZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVD
aGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcjoKKyAgICAjIFdlIGFyZSBlaXRoZXIgU3RyaW5nIG9y
IE9iamVjdC4KKyAgICBidHFueiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFNsb3cKKyAgICBicGVx
IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCwgLm9wUHV0QnlJZFR5cGVDaGVja09iamVj
dAorICAgIGJiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQdXRCeUlkRG9u
ZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKy5vcFB1dEJ5SWRUeXBlQ2hl
Y2tPYmplY3Q6CisgICAgYmJhZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BQ
dXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0
QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nOgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9s
bG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyCisgICAgYnBsdCB0
MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMiwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFu
SW50MzIKKworICAgICMgV2UgYXJlIGVpdGhlciBJbnQzMiBvciBOdW1iZXIuCisgICAgYnBlcSB0
MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXIK
KworICAgIGJxYWVxIHQzLCB0YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcjoK
KyAgICBidHFueiB0MywgdGFnVHlwZU51bWJlciwgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
CisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbklu
dDMyOgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4s
IE90aGVyLgorICAgIGJwbmVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4sIC5vcFB1
dEJ5SWRUeXBlQ2hlY2tCb3R0b21Pck90aGVyCisgICAgeG9ycSBWYWx1ZUZhbHNlLCB0MworICAg
IGJ0cXogdDMsIH4xLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0
QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXI6CisgICAgYnBlcSB0
MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCisg
ICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjoKKyAgICBidHF6IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNr
T2JqZWN0V2l0aFN0cnVjdHVyZQorICAgIGJ0cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja090aGVyCisgICAgam1w
IC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgIHVyc2hpZnRwIDMsIHQxCisgICAgYmluZXEgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJ
RFt0M10sIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlczoKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAgCiAgICAgYnRpeiB0MSwgLm9wUHV0
QnlJZE5vdFRyYW5zaXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMjA0LDYgKzIwNCwyMiBAQCBlbHNlCiAgICAgY29uc3QgTG93ZXN0VGFnID0gRGVs
ZXRlZFZhbHVlVGFnCiBlbmQKIAorIyBOT1RFOiBUaGUgdmFsdWVzIGJlbG93IG11c3QgYmUgaW4g
c3luYyB3aXRoIHdoYXQgaXMgaW4gUHV0QnlJZEZsYWdzLmguCitjb25zdCBQdXRCeUlkUHJpbWFy
eVR5cGVNYXNrID0gMHg2Citjb25zdCBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgPSAweDAK
K2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmUgPSAweDIKK2NvbnN0
IFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyID0gMHg0Citjb25z
dCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sgPSAtMHg4Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZUJvdHRvbSA9IDB4MAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuID0gMHg4
Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyID0gMHgxMAorY29uc3QgUHV0QnlJZFNl
Y29uZGFyeVR5cGVJbnQzMiA9IDB4MTgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVy
ID0gMHgyMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVTdHJpbmcgPSAweDI4Citjb25zdCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCA9IDB4MzAKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0T3JPdGhlciA9IDB4MzgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wID0g
MHg0MAorCiBjb25zdCBDYWxsT3BDb2RlU2l6ZSA9IDkKIAogaWYgWDg2XzY0IG9yIEFSTTY0IG9y
IENfTE9PUApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ29k
ZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNs
dWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRl
ICJFeGVjdXRhYmxlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAi
SW5mZXJyZWRWYWx1ZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5m
ZXJyZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgiCisKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitjbGFzcyBJbmZl
cnJlZFR5cGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVEZXRhaWwgeworcHVibGljOgorICAgIElu
ZmVycmVkVHlwZUZpcmVEZXRhaWwoCisgICAgICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLAorICAgICAgICBjb25zdCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3ImIG9sZERlc2NyaXB0b3IsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYg
bmV3RGVzY3JpcHRvciwKKyAgICAgICAgSlNWYWx1ZSBvZmZlbmRpbmdWYWx1ZSkKKyAgICAgICAg
OiBtX2luZmVycmVkVHlwZShpbmZlcnJlZFR5cGUpCisgICAgICAgICwgbV91aWQodWlkKQorICAg
ICAgICAsIG1fb2xkRGVzY3JpcHRvcihvbGREZXNjcmlwdG9yKQorICAgICAgICAsIG1fbmV3RGVz
Y3JpcHRvcihuZXdEZXNjcmlwdG9yKQorICAgICAgICAsIG1fb2ZmZW5kaW5nVmFsdWUob2ZmZW5k
aW5nVmFsdWUpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KAor
ICAgICAgICAgICAgIkluZmVycmVkIHR5cGUgY2hhbmdlZCBvbiAiLCBSYXdQb2ludGVyKG1faW5m
ZXJyZWRUeXBlKSwgIiBmb3IgcHJvcGVydHkgIiwgbV91aWQsICI6ICIKKyAgICAgICAgICAgICJv
bGQgdHlwZSB3YXMgIiwgbV9vbGREZXNjcmlwdG9yLCAiIHdoaWxlIGRlc2lyZWQgdHlwZSBpcyAi
LCBtX25ld0Rlc2NyaXB0b3IpOworICAgICAgICBpZiAobV9vZmZlbmRpbmdWYWx1ZSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiIGR1ZSB0byAiLCBtX29mZmVuZGluZ1ZhbHVlKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKiBtX2luZmVycmVkVHlwZTsKKyAgICBSZWZQdHI8
VW5pcXVlZFN0cmluZ0ltcGw+IG1fdWlkOworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBt
X29sZERlc2NyaXB0b3I7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fbmV3RGVzY3Jp
cHRvcjsKKyAgICBKU1ZhbHVlIG1fb2ZmZW5kaW5nVmFsdWU7Cit9OworCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZTo6c19pbmZvID0geyAi
SW5mZXJyZWRUeXBlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGUpIH07
CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIElu
ZmVycmVkVHlwZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRU
eXBlPih2bS5oZWFwKSkgSW5mZXJyZWRUeXBlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUgPSBz
dGF0aWNfY2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGUtPkluZmVy
cmVkVHlwZTo6fkluZmVycmVkVHlwZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVHlwZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVk
VHlwZSA9IGpzQ2FzdDxJbmZlcnJlZFR5cGUqPihjZWxsKTsKKworICAgIGlmIChpbmZlcnJlZFR5
cGUtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIoJmluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUtPm1fZmluYWxpemVyKTsKK30KKworSW5mZXJy
ZWRUeXBlOjpLaW5kIEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyBmbGFn
cykKK3sKKyAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFByaW1hcnlUeXBlTWFzaykgeworICAg
IGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5OgorICAgICAgICBzd2l0Y2ggKGZsYWdz
ICYgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSB7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29u
ZGFyeVR5cGVCb3R0b206CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOworICAgICAgICBjYXNl
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFu
OworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXI6CisgICAgICAgICAgICBy
ZXR1cm4gT3RoZXI7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMjoKKyAg
ICAgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZU51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiBOdW1iZXI7CisgICAgICAgIGNhc2UgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOworICAgICAg
ICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIE9i
amVjdDsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXI6Cisg
ICAgICAgICAgICByZXR1cm4gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vj
b25kYXJ5VHlwZVRvcDoKKyAgICAgICAgICAgIHJldHVybiBUb3A7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuIEJvdHRvbTsKKyAgICAgICAgfQorICAgIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmV0dXJuIE9iamVjdFdpdGhTdHJ1Y3R1cmU7Cisg
ICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAg
ICAgICAgcmV0dXJuIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBCb3R0
b207CisgICAgfQorfQorCitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpE
ZXNjcmlwdG9yOjpmb3JWYWx1ZShKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0Jv
b2xlYW4oKSkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICBpZiAodmFsdWUuaXNJbnQz
MigpKQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiBOdW1iZXI7CisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAg
IEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aXNTdHJp
bmcoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGlmIChjZWxsLT5pc09i
amVjdCgpKSB7CisgICAgICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlc2Ny
aXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZSwgY2VsbC0+c3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVG9wOworfQor
CitJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpmb3JG
bGFncyhWTSYgdm0sIFB1dEJ5SWRGbGFncyBmbGFncykKK3sKKyAgICBLaW5kIGtpbmQgPSBraW5k
Rm9yRmxhZ3MoZmxhZ3MpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOworICAgIGlmIChoYXNT
dHJ1Y3R1cmUoa2luZCkpCisgICAgICAgIHN0cnVjdHVyZSA9IHZtLmhlYXAuc3RydWN0dXJlSURU
YWJsZSgpLmdldChkZWNvZGVTdHJ1Y3R1cmVJRChmbGFncykpOworICAgIGVsc2UKKyAgICAgICAg
c3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICByZXR1cm4gRGVzY3JpcHRvcihraW5kLCBzdHJ1Y3R1
cmUpOworfQorCitQdXRCeUlkRmxhZ3MgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpwdXRCeUlk
RmxhZ3MoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBCb3R0b206
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5
VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tKTsKKyAgICBjYXNlIEJv
b2xlYW46CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQ
cmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbik7CisgICAg
Y2FzZSBPdGhlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0
QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcik7Cisg
ICAgY2FzZSBJbnQzMjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4o
UHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVJbnQzMik7
CisgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxh
Z3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVt
YmVyKTsKKyAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5
SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5
cGVTdHJpbmcpOworICAgIGNhc2UgT2JqZWN0OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU9iamVjdCk7CisgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIpOworICAgIGNhc2UgVG9wOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNv
bmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCk7CisgICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKKyAgICAg
ICAgICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmUgfCBlbmNvZGVTdHJ1
Y3R1cmVJRChtX3N0cnVjdHVyZS0+aWQoKSkpOworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAg
ICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgfCBl
bmNvZGVTdHJ1Y3R1cmVJRChtX3N0cnVjdHVyZS0+aWQoKSkpOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQdXRCeUlkTm9uZTsKK30KKwordm9p
ZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6Om1lcmdlKGNvbnN0IERlc2NyaXB0b3ImIG90aGVy
KQoreworICAgIC8vIEZpbHRlciBvdXQgY29tbW9uIHRoaW5ncyB0byBzaW1wbGlmeSB0aGUgc3dp
dGNoIHN0YXRlbWVudCBiZWxvdy4KKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAob3RoZXIubV9raW5kID09IEJvdHRvbSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgKnRoaXMg
PSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICBjYXNlIFN0
cmluZzoKKyAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE90
aGVyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVj
dFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6
CisgICAgICAgICAgICAqdGhpcyA9IERlc2NyaXB0b3IoT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXIsIG90aGVyLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlz
ID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAg
ICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICAqdGhpcyA9IE51bWJlcjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBOdW1iZXI6CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOiAvLyBJZiB3ZSBzZWUgdGhpcyBoZXJlLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUg
c3RydWN0dXJlcyBkaWRuJ3QgbWF0Y2guCisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAg
ICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0g
b3RoZXIubV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAqdGhpcyA9IG90aGVyOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICp0aGlzID0g
T2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RP
ck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgbV9raW5kID0gT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgIHN3aXRj
aCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAg
ICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICBjYXNlIE9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOiAvLyBJZiB3ZSBzZWUgdGhpcyBoZXJlLCB0aGVuIHdlIGtu
b3cgdGhhdCB0aGUgc3RydWN0dXJlcyBkaWRuJ3QgbWF0Y2guCisgICAgICAgIGNhc2UgT2JqZWN0
T3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9r
aW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgKnRo
aXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5k
KSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNh
c2UgT3RoZXI6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNh
c2UgVG9wOgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJlbW92ZVN0
cnVjdHVyZSgpCit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmU6CisgICAgICAgICp0aGlzID0gT2JqZWN0OworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgKnRoaXMgPSBPYmplY3RP
ck90aGVyOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnN1YnN1bWVzKGNvbnN0
IERlc2NyaXB0b3ImIG90aGVyKSBjb25zdAoreworICAgIERlc2NyaXB0b3IgbWVyZ2VkID0gKnRo
aXM7CisgICAgbWVyZ2VkLm1lcmdlKG90aGVyKTsKKyAgICByZXR1cm4gKnRoaXMgPT0gbWVyZ2Vk
OworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9raW5kKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91dC5wcmludCgiOiIs
IGluQ29udGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1w
SW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRUeXBl
KFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVHlwZVN0cnVjdHVyZS5nZXQoKSkK
KyAgICAsIG1fd2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVycmVk
VHlwZTo6fkluZmVycmVkVHlwZSgpCit7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjpjYW5XYXRj
aChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERlc2NyaXB0b3ImIGV4
cGVjdGVkKQoreworICAgIGlmIChleHBlY3RlZC5raW5kKCkgPT0gVG9wKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKSA9PSBleHBlY3Rl
ZDsKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0IERlc2NyaXB0b3ImIGV4
cGVjdGVkKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
cmV0dXJuIGNhbldhdGNoKGxvY2tlciwgZXhwZWN0ZWQpOworfQorCit2b2lkIEluZmVycmVkVHlw
ZTo6YWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZGVzY3JpcHRvcihsb2Nr
ZXIpLmtpbmQoKSAhPSBUb3ApOworCisgICAgbV93YXRjaHBvaW50U2V0LmFkZCh3YXRjaHBvaW50
KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0
Y2hwb2ludCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
IGFkZFdhdGNocG9pbnQobG9ja2VyLCB3YXRjaHBvaW50KTsKK30KKwordm9pZCBJbmZlcnJlZFR5
cGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoUmF3UG9p
bnRlcih0aGlzKSwgIjoiLCBkZXNjcmlwdG9yKCkpOworfQorCitib29sIEluZmVycmVkVHlwZTo6
d2lsbFN0b3JlVmFsdWVTbG93KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIERlc2NyaXB0b3IgbXlUeXBlID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIERlc2NyaXB0
b3Igb3RoZXJUeXBlID0gRGVzY3JpcHRvcjo6Zm9yVmFsdWUodmFsdWUpOworCisgICAgbXlUeXBl
Lm1lcmdlKG90aGVyVHlwZSk7CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpICE9IG15
VHlwZSk7IC8vIFRoZSB0eXBlIG11c3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIG9uIHRoZSBzbG93
IHBhdGguCisKKyAgICBzZXQobG9ja2VyLCB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgbXlUeXBl
KTsKKworICAgIHJldHVybiBraW5kKGxvY2tlcikgIT0gVG9wOworfQorCit2b2lkIEluZmVycmVk
VHlwZTo6bWFrZVRvcFNsb3coVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorewor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgc2V0KGxvY2tlciwg
dm0sIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSgpLCBUb3ApOworfQorCit2b2lkIEluZmVycmVkVHlw
ZTo6c2V0KAorICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIG9mZmVuZGluZ1ZhbHVlLAorICAgIERl
c2NyaXB0b3IgbmV3RGVzY3JpcHRvcikKK3sKKyAgICAvLyBXZSB3aWxsIHRyaWdnZXIgd3JpdGUg
YmFycmllcnMgd2hpbGUgaG9sZGluZyBvdXIgbG9jay4gQ3VycmVudGx5LCB3cml0ZSBiYXJyaWVy
cyBkb24ndCBHQywgYnV0IHRoYXQKKyAgICAvLyBjb3VsZCBjaGFuZ2UuIElmIGl0IGRvZXMsIHdl
IGRvbid0IHdhbnQgdG8gZGVhZGxvY2suIE5vdGUgdGhhdCB3ZSBjb3VsZCBoYXZlIHVzZWQKKyAg
ICAvLyBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGluIHRoZSBjYWxsZXIsIGJ1dCB0aGUgY2Fs
bGVyIGlzIG9uIGEgZmFzdCBwYXRoIHNvIG1heWJlIHRoYXQgd291bGRuJ3QgYmUKKyAgICAvLyBh
IGdvb2QgaWRlYS4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CisgICAg
CisgICAgLy8gQmUgZGVmZW5zaXZlOiBpZiB3ZSdyZSBub3QgcmVhbGx5IGNoYW5naW5nIHRoZSB0
eXBlLCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCisgICAgaWYgKGRlc2NyaXB0
b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBU
aGUgbmV3IGRlc2NyaXB0b3IgbXVzdCBiZSBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgcHJldmlvdXMg
b25lLgorICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN1YnN1bWVzKGRlc2NyaXB0b3IobG9ja2Vy
KSkpOworCisgICAgLy8gSWYgdGhlIG5ldyBkZXNjcmlwdG9ycyBoYXZlIGRpZmZlcmVudCBzdHJ1
Y3R1cmVzLCB0aGVuIGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugb25lIGlzIG51bGwuCisgICAgaWYg
KGRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSAhPSBuZXdEZXNjcmlwdG9yLnN0cnVjdHVy
ZSgpKQorICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IobG9ja2VyKS5zdHJ1Y3R1cmUoKSB8fCAh
bmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSk7CisKKyAgICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhl
IHR5cGUsIHNvIG1ha2Ugc3VyZSB0aGF0IGlmIGFueW9uZSB3YXMgd2F0Y2hpbmcsIHRoZXkgZmlu
ZCBvdXQgYWJvdXQgaXQgbm93LiBJZgorICAgIC8vIGFueW9uZSBpcyB3YXRjaGluZywgd2UgbWFr
ZSBzdXJlIHRvIGdvIHRvIFRvcCBzbyB0aGF0IHdlIGRvbid0IGRvIHRoaXMgc29ydCBvZiB0aGlu
ZyBhZ2Fpbi4KKyAgICBpZiAobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gQ2xlYXJXYXRjaHBv
aW50KSB7CisgICAgICAgIC8vIFdlIGNhbm5vdCBoYXZlIGJlZW4gaW52YWxpZGF0ZWQsIHNpbmNl
IGlmIHdlIHdlcmUsIHRoZW4gd2UnZCBhbHJlYWR5IGJlIGF0IFRvcC4KKyAgICAgICAgQVNTRVJU
KG1fd2F0Y2hwb2ludFNldC5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpOworCisgICAgICAgIElu
ZmVycmVkVHlwZUZpcmVEZXRhaWwgZGV0YWlsKAorICAgICAgICAgICAgdGhpcywgcHJvcGVydHlO
YW1lLnVpZCgpLCBkZXNjcmlwdG9yKGxvY2tlciksIG5ld0Rlc2NyaXB0b3IsIG9mZmVuZGluZ1Zh
bHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGRvIGV4cGVuc2l2ZSB0
aGluZ3MgYmVjYXVzZSBzb21lIGNvbXBpbGVyIHRocmVhZCBkZWNpZGVkIHRvIHdhdGNoIHRoaXMg
dHlwZSBhbmQKKyAgICAgICAgLy8gdGhlbiB0aGUgdHlwZSBjaGFuZ2VkLiBBc3N1bWUgdGhhdCB0
aGlzIHByb3BlcnR5IGlzIGNyYXp5LCBhbmQgZG9uJ3QgZXZlciBkbyBhbnkgbW9yZSB0aGluZ3Mg
Zm9yCisgICAgICAgIC8vIGl0LgorICAgICAgICBuZXdEZXNjcmlwdG9yID0gVG9wOworCisgICAg
ICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKGRldGFpbCk7CisgICAgfQorCisgICAgLy8gUmVt
b3ZlIHRoZSBvbGQgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5vIGxvbmdlciBuZWVk
IGl0LgorICAgIGlmICghbmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgbV9zdHJ1
Y3R1cmUgPSBudWxscHRyOworCisgICAgLy8gQWRkIGEgbmV3IEluZmVycmVkU3RydWN0dXJlIG9i
amVjdCBpZiB3ZSBuZWVkIG9uZSBub3cuCisgICAgaWYgKG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJl
KCkpIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91
bGQgYWdyZWUgb24gdGhlIHN0cnVjdHVyZXMgaWYgd2UgZ2V0IGhlcmUuCisgICAgICAgICAgICBB
U1NFUlQobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZS0+c3RydWN0dXJl
KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdGQ6Om1h
a2VfdW5pcXVlPEluZmVycmVkU3RydWN0dXJlPih2bSwgdGhpcywgbmV3RGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludCgmbV9zdHJ1Y3R1cmUtPm1fd2F0Y2hwb2ludCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBzZXQgdGhlIGRlc2NyaXB0b3Iga2luZC4KKyAgICBt
X2tpbmQgPSBuZXdEZXNjcmlwdG9yLmtpbmQoKTsKKworICAgIC8vIEFzc2VydCB0aGF0IHdlIGRp
ZCB0aGluZ3MuCisgICAgQVNTRVJUKGRlc2NyaXB0b3IobG9ja2VyKSA9PSBuZXdEZXNjcmlwdG9y
KTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGU6OnJlbW92ZVN0cnVjdHVyZSgpCit7CisgICAgLy8g
RklYTUU6IEZpbmQgYW4gZWxlZ2FudCBhbmQgY2hlYXAgd2F5IHRvIHRocmVhZCBpbmZvcm1hdGlv
biBhYm91dCB3aHkgd2UgZ290IGhlcmUgaW50byB0aGUgZmlyZQorICAgIC8vIGRldGFpbCBpbiBz
ZXQoKS4KKyAgICAKKyAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsKKworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgRGVzY3JpcHRv
ciBuZXdEZXNjcmlwdG9yID0gZGVzY3JpcHRvcihsb2NrZXIpOworICAgIG5ld0Rlc2NyaXB0b3Iu
cmVtb3ZlU3RydWN0dXJlKCk7CisgICAgCisgICAgc2V0KGxvY2tlciwgdm0sIFByb3BlcnR5TmFt
ZShudWxscHRyKSwgSlNWYWx1ZSgpLCBuZXdEZXNjcmlwdG9yKTsKK30KKwordm9pZCBJbmZlcnJl
ZFR5cGU6OkluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKGNvbnN0IEZp
cmVEZXRhaWwmKQoreworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9
CisgICAgICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAorICAgICAgICAgICAg
Yml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVj
dHVyZSwgbV93YXRjaHBvaW50KSk7CisKKyAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQt
PnJlbW92ZVN0cnVjdHVyZSgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1
Y3R1cmVGaW5hbGl6ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBJbmZlcnJl
ZFN0cnVjdHVyZSogaW5mZXJyZWRTdHJ1Y3R1cmUgPQorICAgICAgICBiaXR3aXNlX2Nhc3Q8SW5m
ZXJyZWRTdHJ1Y3R1cmUqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykg
LSBPQkpFQ1RfT0ZGU0VUT0YoSW5mZXJyZWRTdHJ1Y3R1cmUsIG1fZmluYWxpemVyKSk7CisKKyAg
ICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoaW5mZXJyZWRTdHJ1Y3R1cmUtPm1fcGFyZW50KSk7Cisg
ICAgCisgICAgaWYgKCFIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9zdHJ1Y3R1
cmUuZ2V0KCkpKQorICAgICAgICBpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQtPnJlbW92ZVN0
cnVjdHVyZSgpOworfQorCitJbmZlcnJlZFR5cGU6OkluZmVycmVkU3RydWN0dXJlOjpJbmZlcnJl
ZFN0cnVjdHVyZShWTSYgdm0sIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAsIG1fc3RydWN0dXJlKHZtLCBwYXJl
bnQsIHN0cnVjdHVyZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgSW5mZXJyZWRUeXBlOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5k
KSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgb3V0LnByaW50KCJC
b3R0b20iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFu
OgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBvdXQu
cHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
TnVtYmVyOgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0LnByaW50KCJTdHJpbmci
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3Ry
dWN0dXJlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjoKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAg
b3V0LnByaW50KCJPYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpPYmplY3RPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIG91
dC5wcmludCgiVG9wIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZV9oCisjZGVmaW5lIEluZmVycmVk
VHlwZV9oCisKKyNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUgIkpTQ2Vs
bC5oIgorI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgorI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5o
IgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMg
aXMgYW4gb2JqZWN0IHVzZWQgZm9yIHRoZSBpbmZlcmVuY2Ugb2YgdGhlIHR5cGVzIG9mIG9iamVj
dCBwcm9wZXJ0aWVzLgorCitjbGFzcyBJbmZlcnJlZFR5cGUgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEluZmVy
cmVkVHlwZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRh
bCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwor
CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgZW51bSBLaW5kIDogdWludDhfdCB7CisgICAgICAg
IEJvdHRvbSwKKyAgICAgICAgQm9vbGVhbiwKKyAgICAgICAgT3RoZXIsCisgICAgICAgIEludDMy
LAorICAgICAgICBOdW1iZXIsCisgICAgICAgIFN0cmluZywKKyAgICAgICAgT2JqZWN0V2l0aFN0
cnVjdHVyZSwKKyAgICAgICAgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIsCisgICAgICAgIE9i
amVjdCwKKyAgICAgICAgT2JqZWN0T3JPdGhlciwKKyAgICAgICAgVG9wCisgICAgfTsKKworICAg
IHN0YXRpYyBLaW5kIGtpbmRGb3JGbGFncyhQdXRCeUlkRmxhZ3MpOworICAgIAorICAgIHN0YXRp
YyBib29sIGhhc1N0cnVjdHVyZShLaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjbGFzcyBEZXNjcmlwdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlc2NyaXB0
b3IoKQorICAgICAgICAgICAgOiBtX2tpbmQoQm90dG9tKQorICAgICAgICAgICAgLCBtX3N0cnVj
dHVyZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBEZXNjcmlwdG9y
KEtpbmQga2luZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyKQorICAgICAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaGFzU3RydWN0dXJlKGtpbmQpKQorICAgICAgICAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIERlc2Ny
aXB0b3IgZm9yVmFsdWUoSlNWYWx1ZSk7CisKKyAgICAgICAgc3RhdGljIERlc2NyaXB0b3IgZm9y
RmxhZ3MoVk0mLCBQdXRCeUlkRmxhZ3MpOworCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9raW5kICE9IEJvdHRv
bSB8fCBtX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisKKyAgICAgICAgUHV0QnlJZEZsYWdzIHB1dEJ5SWRG
bGFncygpIGNvbnN0OworCisgICAgICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpbmNsdWRlc1ZhbHVl
KEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgICAgICAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBjYXNlIEJvb2xlYW46CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmlzQm9vbGVhbigpOworICAgICAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKKyAgICAgICAgICAgIGNh
c2UgTnVtYmVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc051bWJlcigpOworICAg
ICAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzU3Ry
aW5nKCk7CisgICAgICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KSA9PSBtX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkK
KyAgICAgICAgICAgICAgICAgICAgfHwgKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKSA9PSBtX3N0cnVjdHVyZSk7CisgICAgICAgICAgICBjYXNlIE9iamVjdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNPYmplY3QoKTsKKyAgICAgICAgICAgIGNh
c2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSB8fCB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBUb3A6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAgICAg
JiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpQdHJIYXNoPFN0cnVjdHVyZSo+OjpoYXNoKG1fc3RydWN0dXJlKSBeIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX2tpbmQpOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgbWVy
Z2UoY29uc3QgRGVzY3JpcHRvciYpOworICAgICAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOwor
CisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGRlc2NyaXB0b3IgaXMgbW9yZSBnZW5l
cmFsIHRoYW4gdGhlIG90aGVyIG9uZS4KKyAgICAgICAgYm9vbCBzdWJzdW1lcyhjb25zdCBEZXNj
cmlwdG9yJikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBLaW5kIG1fa2luZDsKKyAgICAgICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICB9OworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxv
Y2soKSBjb25zdCB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIERlc2NyaXB0b3IgZGVzY3JpcHRv
ck1haW5UaHJlYWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIERlc2NyaXB0b3IobV9r
aW5kLCBtX3N0cnVjdHVyZSA/IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOwor
ICAgIH0KKyAgICAKKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVzY3JpcHRvck1haW5UaHJl
YWQoKTsKKyAgICB9CisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVy
biBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZChjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIpIGNvbnN0IHsgcmV0dXJuIGRlc2NyaXB0b3IobG9j
a2VyKS5raW5kKCk7IH0KKworICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX2tpbmQg
PT0gVG9wOyB9CisgICAgYm9vbCBpc1JlbGV2YW50KCkgY29uc3QgeyByZXR1cm4gbV9raW5kICE9
IFRvcDsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgaXMgc3Rp
bGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdCByZWxldmFudCBpZiBpdCdzIFRv
cC4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgd2lsbFN0b3JlVmFsdWUoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRGVzY3Jp
cHRvciBjdXJyZW50RGVzY3JpcHRvciA9IGRlc2NyaXB0b3JNYWluVGhyZWFkKCk7CisgICAgICAg
IGlmIChjdXJyZW50RGVzY3JpcHRvci5pbmNsdWRlc1ZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBjdXJyZW50RGVzY3JpcHRvci5raW5kKCkgIT0gVG9wOworICAgICAgICByZXR1cm4g
d2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICAvLyBJbW1lZGlhdGVseSBtYWtlcyB0aGlzIHR5cGUgaXJyZWxldmFudC4KKyAgICB2b2lkIG1h
a2VUb3AoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorICAgIHsKKyAgICAgICAg
aWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1ha2VUb3BTbG93KHZt
LCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBjdXJy
ZW50bHkgbWFrZXMgc2Vuc2UgdG8gd2F0Y2ggdGhpcyBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgZGVz
Y3JpcHRvci4gTm90ZSB0aGF0CisgICAgLy8gdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2Ug
Zm9yIFRvcC4KKyAgICBib29sIGNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgY29uc3QgRGVzY3JpcHRvciYpOworICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgRGVzY3Jp
cHRvciYpOworICAgIAorICAgIHZvaWQgYWRkV2F0Y2hwb2ludChjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiBsb2NrZXIsIFdhdGNocG9pbnQqKTsKKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0
Y2hwb2ludCopOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgSW5mZXJyZWRUeXBlKFZNJik7CisgICAgfkluZmVycmVkVHlwZSgpOworCisgICAg
Ym9vbCB3aWxsU3RvcmVWYWx1ZVNsb3coVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOworICAg
IHZvaWQgbWFrZVRvcFNsb3coVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIHZvaWQgc2V0KGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgRGVzY3Jp
cHRvcik7CisgICAgdm9pZCByZW1vdmVTdHJ1Y3R1cmUoKTsKKworICAgIG11dGFibGUgQ29uY3Vy
cmVudEpJVExvY2sgbV9sb2NrOworICAgIAorICAgIEtpbmQgbV9raW5kIHsgQm90dG9tIH07CisK
KyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQgOiBwdWJsaWMgV2F0Y2hwb2lu
dCB7CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQoKSB7
IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmlyZUludGVybmFsKGNvbnN0IEZpcmVE
ZXRhaWwmKSBvdmVycmlkZTsKKyAgICB9OworCisgICAgY2xhc3MgSW5mZXJyZWRTdHJ1Y3R1cmVG
aW5hbGl6ZXIgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7CisgICAgcHVibGljOgor
ICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcigpIHsgfQorICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgIH07
CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmUoVk0mLCBJ
bmZlcnJlZFR5cGUqIHBhcmVudCwgU3RydWN0dXJlKik7CisKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsgfTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBJbmZlcnJlZFR5cGU7CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ7CisgICAgICAgIGZyaWVuZCBjbGFz
cyBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcjsKKyAgICAgICAgCisgICAgICAgIEluZmVycmVk
VHlwZSogbV9wYXJlbnQ7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0
dXJlOworCisgICAgICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCBtX3dhdGNocG9pbnQ7
CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyIG1fZmluYWxpemVyOworICAgIH07
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5mZXJyZWRTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwor
CisgICAgLy8gTk9URTogSWYgdGhpcyBpcyBiZWluZyB3YXRjaGVkLCB3ZSB0cmFuc2Zvcm0gdG8g
VG9wIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgaXQgd291bGRuJ3QgYmUKKyAgICAvLyBwcm9m
aXRhYmxlIHRvIHdhdGNoIGl0IGFnYWluLiBBbHNvLCB0aGlzIHNldCBpcyBpbml0aWFsaXplZCBj
bGVhciwgYW5kIGlzIG5ldmVyIGV4cG9zZWQgdG8gdGhlIERGRworICAgIC8vIHRocmVhZC4gVGhl
IERGRyB3aWxsIHVzZSB0aGUgSW5mZXJyZWRUeXBlIGFzIHRoZSB0aGluZyB0aGF0IGl0IHdhdGNo
ZXMuCisgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX3dhdGNocG9pbnRTZXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6SW5mZXJyZWRUeXBlOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBJbmZlcnJlZFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bmZlcnJlZFR5cGVUYWJsZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVHlwZVRhYmxlOjpzX2luZm8gPSB7
ICJJbmZlcnJlZFR5cGVUYWJsZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRU
eXBlVGFibGUpIH07CisKK0luZmVycmVkVHlwZVRhYmxlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Y3Jl
YXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogcmVzdWx0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJyZWRUeXBlVGFibGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5
cGVUYWJsZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0gc3RhdGlj
X2Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFR5cGVUYWJsZS0+
SW5mZXJyZWRUeXBlVGFibGU6On5JbmZlcnJlZFR5cGVUYWJsZSgpOworfQorCitTdHJ1Y3R1cmUq
IEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgSW5mZXJyZWRUeXBlVGFibGUqIGluZmVycmVkVHlwZVRhYmxlID0ganNDYXN0PEluZmVycmVk
VHlwZVRhYmxlKj4oY2VsbCk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihpbmZl
cnJlZFR5cGVUYWJsZS0+bV9sb2NrKTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogaW5m
ZXJyZWRUeXBlVGFibGUtPm1fdGFibGUpIHsKKyAgICAgICAgaWYgKCFlbnRyeS52YWx1ZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZW50cnkudmFsdWUtPmlzUmVsZXZhbnQo
KSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyeS52YWx1ZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVudHJ5LnZhbHVlLmNsZWFyKCk7CisgICAgfQorfQorCitJbmZlcnJl
ZFR5cGUqIEluZmVycmVkVHlwZVRhYmxlOjpnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgYXV0byBpdGVyID0gbV90YWJsZS5maW5k
KHVpZCk7CisgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gVGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRv
IHBydW5lIGludmFsaWRhdGVkIHR5cGVzLgorICAgIGlmICghaXRlci0+dmFsdWUtPmlzUmVsZXZh
bnQoKSkgeworICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlci0+dmFsdWUuZ2V0KCk7Cit9CisKK0luZmVy
cmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQor
eworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgcmV0dXJuIGdl
dChsb2NrZXIsIHVpZCk7Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6Omdl
dChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBnZXQocHJvcGVydHlO
YW1lLnVpZCgpKTsKK30KKworYm9vbCBJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUo
CisgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBT
dG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGll
cyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25lIHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAu
CisgICAgCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0eSkgeworICAgICAgICBUYWJsZVR5cGU6
Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAg
ICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAhaXRlci0+dmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9PiB0b3AuCisgICAgICAgIAor
ICAgICAgICBpZiAoaXRlci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaXRl
ci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFRh
YmxlVHlwZTo6QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJlc3VsdCA9IG1fdGFibGUuYWRkKHByb3Bl
cnR5TmFtZS51aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7CisgICAgfQorICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVk
VHlwZSA9IEluZmVycmVkVHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXQodm0sIHRoaXMsIGlu
ZmVycmVkVHlwZSk7CisgICAgfSBlbHNlIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6Om1ha2VUb3AoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7Cisg
ICAgLy8gVGhlIGFsZ29yaXRobSBoZXJlIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IG9ubHkgb25l
IHRocmVhZCBtb2RpZmllcyB0aGUgaGFzaCBtYXAuCisgICAgaWYgKGFnZSA9PSBPbGRQcm9wZXJ0
eSkgeworICAgICAgICBUYWJsZVR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RhYmxlLmZpbmQocHJv
cGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV90YWJsZS5lbmQoKSB8fCAh
aXRlci0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm47IC8vIEFic2VuY2Ugb24gcmVwbGFjZSA9
PiB0b3AuCisKKyAgICAgICAgaXRlci0+dmFsdWUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSk7
CisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBUYWJsZVR5cGU6OkFkZFJlc3VsdCByZXN1bHQ7CisgICAgeworICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXN1bHQgPSBtX3RhYmxlLmFk
ZChwcm9wZXJ0eU5hbWUudWlkKCksIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+KCkpOworICAg
IH0KKyAgICBpZiAoIXJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tYWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuY2xlYXIoKTsKK30KKworSW5mZXJyZWRUeXBl
VGFibGU6OkluZmVycmVkVHlwZVRhYmxlKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVy
cmVkVHlwZVRhYmxlU3RydWN0dXJlLmdldCgpKQoreworfQorCitJbmZlcnJlZFR5cGVUYWJsZTo6
fkluZmVycmVkVHlwZVRhYmxlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmZlcnJlZFR5cGVU
YWJsZV9oCisjZGVmaW5lIEluZmVycmVkVHlwZVRhYmxlX2gKKworI2luY2x1ZGUgIklkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdGFibGUgb2YgaW5mZXJyZWQgdHlwZXMgZm9yIHNvbWUg
c3RydWN0dXJlLiBUaGlzIGlzIGEgSlNDZWxsIGJlY2F1c2UgdGhhdCBzaW1wbGlmaWVzIHRoZSBT
dHJ1Y3R1cmUKKy8vIGRlc3RydWN0b3IgYW5kIG1ha2VzIGxpZmV0aW1lIGVhc2llciB0byBtYW5h
Z2UuIEZvciBleGFtcGxlLCBzaW5jZSBpdCdzIGEgY2VsbCwgd2Uga25vdyB0aGF0IHRoaXMgdGhp
bmcKKy8vIGNhbm5vdCBiZSBkZWxldGVkIHdoaWxlIHRoZSBERkcgaXMgcnVubmluZy4gVGhpcyBp
cyBzZXBhcmF0ZSBmcm9tIFByb3BlcnR5VGFibGUgYmVjYXVzZSBtb3N0IHByb3BlcnRpZXMKKy8v
IHdpbGwgbm90IGhhdmUgYW4gSW5mZXJyZWRUeXBlLCBzaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJl
IGluIGRpY3Rpb25hcmllcyAoaWYgeW91IHRoaW5rIG9mICJhIHByb3BlcnR5IgorLy8gYXMgYmVp
bmcgImEgcHJvcGVydHkgaW4gc29tZSBTdHJ1Y3R1cmUiKS4gQWxzbywgdGhpcyB3aWxsIGhhcHBp
bHkgY29uZmxhdGUgdGhlIHR5cGVzIG9mIHByb3BlcnRpZXMgZnJvbQorLy8gZGlmZmVyZW50IHN0
cnVjdHVyZXMgZXZlbiBpZiB0aGUgc3RydWN0dXJlcyByZXByZXNlbnQgZGlzam9pbnQgc2V0cyBv
ZiBvYmplY3RzLgorCitjbGFzcyBJbmZlcnJlZFR5cGVUYWJsZSBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5m
ZXJyZWRUeXBlVGFibGUqIGNyZWF0ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
KworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlz
SW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2Nr
KCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX3RhYmxlLmlzRW1wdHkoKTsgfQorCisgICAgLy8gR2V0IHRoZSBjdXJyZW50IGluZmVycmVk
IHR5cGUuIFJldHVybnMgbnVsbHB0ciBmb3IgYm90aCBUb3AgYW5kIEJvdHRvbS4gTnVsbCBtZWFu
cyBCb3R0b20gaWYgdGhlCisgICAgLy8gb3duaW5nIFN0cnVjdHVyZSBkb2Vzbid0IGtub3cgYWJv
dXQgdGhlIHByb3BlcnR5LgorICAgIEluZmVycmVkVHlwZSogZ2V0KGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIEluZmVycmVkVHlwZSogZ2V0KFVu
aXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoUHJvcGVydHlOYW1lKTsK
KworICAgIGVudW0gU3RvcmVkUHJvcGVydHlBZ2UgeworICAgICAgICBOZXdQcm9wZXJ0eSwKKyAg
ICAgICAgT2xkUHJvcGVydHkKKyAgICB9OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgSW5mZXJyZWRUeXBlIGZvciB0aGlzIHByb3BlcnR5IGlzIHN0aWxsIHJlbGV2YW50IGFmdGVy
IHRoZSBzdG9yZS4gSXQncyBub3QKKyAgICAvLyByZWxldmFudCBpZiBpdCdzIFRvcC4gTm90ZSB0
aGF0IHRoaXMgdGFibGUgd2lsbCBpbnRlcm5hbGx5IHBydW5lIFRvcCBlbnRyaWVzLgorICAgIGJv
b2wgd2lsbFN0b3JlVmFsdWUoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFN0b3JlZFByb3Bl
cnR5QWdlKTsKKworICAgIC8vIEludmFsaWRhdGVzIHRoZSB0eXBlIGZvciB0aGUgcHJvcGVydHku
IFVzZWZ1bCBpZiB3ZSBkZXRlY3QgYSBzdG9yZSBpbiBhIHJlZmxlY3RpdmUgY29udGV4dC4KKyAg
ICB2b2lkIG1ha2VUb3AoVk0mLCBQcm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlKTsKKwor
cHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGVUYWJsZShWTSYpOworICAgIH5JbmZlcnJlZFR5cGVU
YWJsZSgpOworCisgICAgLy8gQm90dG9tOiBhYnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8gVG9w
OiBudWxsIHZhbHVlIGluIHRhYmxlLCAhdmFsdWUtPmlzUmVsZXZhbnQoKSwgb3IgYWJzZW5jZSBm
cm9tIHRhYmxlLgorICAgIC8vCisgICAgLy8gV2Uga25vdyBob3cgdG8gZGV0ZXJtaW5lIGlmIGFi
c2VuY2UgZnJvbSB0aGUgdGFibGUgaXMgYm90dG9tIG9yIHRvcCBkZXBlbmRpbmcgb24gd2hldGhl
ciB0aGUKKyAgICAvLyBwcm9wZXJ0eSBpcyBwcmVzZW50IGluIHRoZSBvd25pbmcgc3RydWN0dXJl
LiBIZW5jZSwgZGVwZW5kaW5nIG9uIHRoZSBzdHJ1Y3R1cmUsIGFic2VuY2UgbWF5IGhhdmUKKyAg
ICAvLyBkaWZmZXJlbnQgbWVhbmluZ3MuIFRoZSB3YXkgdGhhdCB0aGlzIGNsYXNzIGRldGVybWlu
ZXMgaWYgdGhlIG93bmluZyBzdHJ1Y3R1cmUga25vd3Mgb2YgdGhlIHByb3BlcnR5CisgICAgLy8g
aXMgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYWN0aW9uczogcmVwbGFjZSBvciB0cmFu
c2l0aW9uLiBJZiB3ZSdyZSBhZGRpbmcgYSBuZXcgcHJvcGVydHkKKyAgICAvLyAodHJhbnNpdGlv
biksIHRoZW4gYWJzZW5jZSBtZWFucyBib3R0b20uIElmIHdlJ3JlIHN0b3JpbmcgdG8gYW4gZXhp
c3RpbmcgcHJvcGVydHkgKHJlcGxhY2UpLCB0aGVuCisgICAgLy8gYWJzZW5jZSBtZWFucyB0b3Au
IFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBoYXZlIHRvIHdhdGNoIG91dCBmb3IgdGhlIGNhc2Ugd2hl
cmUgdHdvIHN0cnVjdHVyZXMsIFMxIGFuZAorICAgIC8vIFMyLCBzaGFyZSB0aGUgc2FtZSBJbmZl
cnJlZFR5cGVUYWJsZSBhbmQgbmVpdGhlciBvZiB0aGVtIGluaXRpYWxseSBrbm93IGFib3V0IHBy
b3BlcnR5IFAuIFMxIG1heQorICAgIC8vIHdhbnQgdG8gYWRkIFAgd2l0aG91dCBhIHR5cGUsIHdo
aWxlIFMyIG1heSB3YW50IHRvIGFkZCBQIHdpdGggYSB0eXBlLiBJZiBTMSBhZGRlZCBQIGFuZCB1
c2VkIGFic2VuY2UKKyAgICAvLyB0byBpbmRpY2F0ZSBUb3AsIHRoZW4gUzIgd291bGQgdXNlIHRo
YXQgYWJzZW5jZSB0byBtZWFuIEJvdHRvbSBhbmQgd291bGQgZW5kIHVwIGNyZWF0aW5nIGEgbm9u
LVRvcAorICAgIC8vIGVudHJ5IGluIHRoZSB0YWJsZS4gVGhlbiBTMSB3b3VsZCBmb3JnZXQgdGhh
dCBpdCB3YW50ZWQgVG9wLCBhbmQgd291bGQgdXNlIFMyJ3MgdHlwZS4gQ2xlYXJseSwKKyAgICAv
LyB0aGF0J3MgYmFkLiBXZSBhdm9pZCBzdWNoIGNvbmZ1c2lvbiBieSBlbnN1cmluZyB0aGF0IGEg
dHJhbnNpdGlvbiBhbHdheXMgYWRkcyBhbiBlbnRyeS4gSGVuY2UsCisgICAgLy8gYWJzZW5jZS1t
ZWFucy1ib3R0b20gb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIHByb3BlcnRpZXMgYWRkZWQgYmVm
b3JlIHRoZSBJbmZlcnJlZFR5cGVUYWJsZSB3YXMKKyAgICAvLyBjcmVhdGVkLgorICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBXcml0ZUJhcnJpZXI8SW5mZXJy
ZWRUeXBlPiwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8VW5pcXVlZFN0cmluZ0ltcGwq
Pj4gVGFibGVUeXBlOworICAgIAorICAgIFRhYmxlVHlwZSBtX3RhYmxlOworCisgICAgLy8gV2Ug
b25seSBncmFiIHRoaXMgbG9jayB3aGVuIHdlJ3JlIGRvaW5nIG1vZGlmaWNhdGlvbnMgb24gdGhl
IG1haW4gdGhyZWFkLCBvciByZWFkcyBvbiB0aGUgY29tcGlsZXIKKyAgICAvLyB0aHJlYWQuIFRo
ZSBjb21waWxlciB0aHJlYWQgaXMgbm90IGFsbG93ZWQgdG8gZG8gbW9kaWZpY2F0aW9ucy4KKyAg
ICBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEluZmVycmVkVHlwZVRhYmxlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExODksNiAr
MTE4OSw4IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAoc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFz
SW5mZXJyZWRUeXBlcygpKTsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCkgewpAQCAtMTIyNywyOSArMTIyOSw0MCBAQCBpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7
CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwotICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUo
KSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CisgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmUoCisgICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBv
ZmZzZXQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT53
aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAg
ICAgICAgCiAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRDYXBh
Y2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3QnV0
dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAh
PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChuZXdTdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgbmV3QnV0
dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpOworICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRl
czsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50
QXR0cmlidXRlcyk7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVy
cmVkVHlwZSk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlm
ICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFj
ZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUp
KSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAg
ICAgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0g
UHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgfQorCiAgICAgICAgIHNsb3Quc2V0
RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9m
ZnNldCwgdmFsdWUpOwogCkBAIC0xMjY4LDE2ICsxMjgxLDE5IEBAIGlubGluZSBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAvLyB3ZSB3YW50LgogICAgIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7CiAg
ICAgCi0gICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4
dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0
Y2hwb2ludEZpcmUpOworICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0
aW9uKAorICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0g
UHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZz
ZXQpOwotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJl
KTsKKyAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAg
IHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIG5ld1N0cnVj
dHVyZSk7CiAKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgIHNsb3Quc2V0
TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5
KQotICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Cisg
ICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMzNSw4ICsxMzUxLDExIEBAIGlubGluZSB2b2lkIEpT
T2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRP
ZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9y
YWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1
Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdGhpcy0+c3RydWN0dXJlKCk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMpOworICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICBzdHJ1Y3R1cmUt
PndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hv
dWxkT3B0aW1pemUpOworICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
LCBuZXdCdXR0ZXJmbHkpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDExICszNTAsMTUgQEAgdm9pZCBTdHJ1Y3R1cmU6
Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdGhpcywgdGFibGUpOwogCisgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVU
YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CisKICAgICBmb3IgKHNpemVfdCBpID0g
c3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJl
c1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUt
Pm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+
YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CisgICAgICAgIGlmICh0eXBlVGFibGUgJiYgdHlwZVRh
YmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpKSkKKyAgICAgICAgICAg
IGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7CiAgICAgICAgIHByb3BlcnR5VGFibGUoKS0+
YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90
Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC00NjQsNiArNDY4LDcgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJ
blByZXZpb3VzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5z
ZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQ
aW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZz
ZXQ7CisgICAgdHJhbnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwodm0s
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAKICAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7
CiAKQEAgLTQ3OSw2ICs0ODQsMjQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdAogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CisgICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUg
Z29vZCByZWFzb25zIHdoeSB0aGlzIGdvZXMgZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlv
bmFyeSByYXRoZXIgdGhhbgorICAgIC8vIGNhY2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXgg
YWxsIG9mIHRoZXNlIHRoaW5ncywgYnV0IHdlIG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdl
IGV2ZXIgdHJ5CisgICAgLy8gdG8gb3B0aW1pemUgdGhpcyBjYXNlLgorICAgIC8vCisgICAgLy8g
LSBDYWNoZWQgdHJhbnNpdGlvbnMgdXN1YWxseSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFu
ZCBhc3N1bWUgdGhhdCB0aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgdGhleQorICAgIC8vICAgY2Fu
IGp1c3QgcmVidWlsZCB0aGUgdGFibGUgYnkgbG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBU
aGF0IGNvZGUgYXNzdW1lcyB0aGF0IHRoZSB0YWJsZSBvbmx5CisgICAgLy8gICBncmV3IGFuZCBu
ZXZlciBzaHJhbmsuIFRvIHN1cHBvcnQgcmVtb3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhl
IHByb3BlcnR5IHRhYmxlIG1hdGVyaWFsaXphdGlvbgorICAgIC8vICAgY29kZSB0byBoYW5kbGUg
ZGVsZXRpb25zLiBBbHNvLCB3ZSBoYXZlIGxvZ2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0
aWVzIG9uIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUg
YnkganVzdCBsb29raW5nIGJhY2sgdGhyb3VnaCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNl
IHRoZSBsYXN0CisgICAgLy8gICBzdHJ1Y3R1cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRo
YXQgbG9naWMgd291bGQgYWxzbyBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAor
ICAgIC8vICAgcmVtb3ZhbHMuCisgICAgLy8KKyAgICAvLyAtIEluZmVycmVkVHlwZVRhYmxlIGFz
c3VtZXMgdGhhdCByZW1vdmFsIGhhcyBuZXZlciBoYXBwZW5lZC4gVGhpcyBpcyBpbXBvcnRhbnQg
c2luY2UgaWYgd2UgY291bGQKKyAgICAvLyAgIHJlbW92ZSBhIHByb3BlcnR5IGFuZCB0aGVuIHJl
LWFkZCBpdCBsYXRlciwgdGhlbiB0aGUgImFic2VuY2UgbWVhbnMgdG9wIiBvcHRpbWl6YXRpb24g
d291bGRuJ3QKKyAgICAvLyAgIHdvcmsgYW55bW9yZSwgdW5sZXNzIHJlbW92YWwgYWxzbyBlaXRo
ZXIgcG9pc29uZWQgdHlwZSBpbmZlcmVuY2UgKGJ5IGRvaW5nIHNvbWV0aGluZyBlcXVpdmFsZW50
IHRvCisgICAgLy8gICBoYXNCZWVuRGljdGlvbmFyeSkgb3IgYnkgc3Ryb25nbHkgbWFya2luZyB0
aGUgZW50cnkgYXMgVG9wIGJ5IGVuc3VyaW5nIHRoYXQgaXQgaXMgbm90IGFic2VudCwgYnV0Cisg
ICAgLy8gICBpbnN0ZWFkLCBoYXMgYSBudWxsIGVudHJ5LgorICAgIAogICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKIAogICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KTsKQEAgLTg0MSw2ICs4NjQsNDMgQEAgdm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRl
cm5hbFBybwogICAgIHNldERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKHRydWUpOwogfQogCit2
b2lkIFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAorICAgIFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6ZSwKKyAg
ICBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UgYWdlKQoreworICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNz
SW5mbygpID09IGluZm8oKSk7CisgICAgQVNTRVJUKCFoYXNCZWVuRGljdGlvbmFyeSgpKTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgaW5mZXJyZWQgdHlwZSB0YWJsZSBiZWZvcmUgZG9pbmcgYW55dGhp
bmcgZWxzZSwgc28gdGhhdCB3ZSBkb24ndCBHQyBhZnRlciB3ZSBoYXZlIGFscmVhZHkKKyAgICAv
LyBncmFiYmVkIGEgcG9pbnRlciBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuCisgICAgSW5mZXJyZWRU
eXBlVGFibGUqIHRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKyAgICBpZiAoIXRh
YmxlKSB7CisgICAgICAgIHRhYmxlID0gSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZSh2bSk7Cisg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1faW5mZXJyZWRUeXBlVGFi
bGUuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBvbmx5IHdvcmtz
IGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgorICAgIFByb3BlcnR5VGFibGUqIHByb3Bl
cnR5VGFibGU7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9w
ZXJ0eVRhYmxlKTsKKworICAgIC8vIFdlIG11c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhhdmlu
ZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMgcHJl
c2VudAorICAgIC8vIGFscmVhZHksIHNvIHdlIG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxlIG5v
dy4KKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZSk7CisKKyAgICAvLyAuLi4gYW5kIHRoZSBwcm9w
ZXJ0eSBtdXN0IGJlIHByZXNlbnQuCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9w
ZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBBU1NFUlQoZW50cnkpOwor
CisgICAgaWYgKHNob3VsZE9wdGltaXplKQorICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBl
ID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2UpOwor
ICAgIGVsc2UgeworICAgICAgICB0YWJsZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lLCBhZ2Up
OworICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gZmFsc2U7CisgICAgfQorfQorCiAj
aWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogCiBQcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzKiBw
cm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzID0gMDsKQEAgLTEwNTgsNiArMTExOCw4IEBAIHZvaWQg
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CiAgICAgfSBlbHNlIGlmICh0
aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZS5jbGVhcigpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1faW5mZXJyZWRUeXBlVGFibGUpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJvdG90
eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNzSW5m
by5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdU
eXBlLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCkBAIC04MSwx
MSArODIsMTMgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVpbnQ4X3QgYXR0cmli
dXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsgLy8gVGhpcyBjYWNoZXMgd2hldGhlciBv
ciBub3QgYSBwcm9wZXJ0eSBoYXMgYW4gaW5mZXJyZWQgdHlwZSBpbiB0aGUgaW5mZXJyZWQgdHlw
ZSB0YWJsZSwgYW5kIGlzIHVzZWQgZm9yIGEgZmFzdCBjaGVjayBpbiBKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwoKS4KIAogICAgIFByb3BlcnR5TWFwRW50cnkoKQogICAgICAgICA6IGtleShu
dWxscHRyKQogICAgICAgICAsIG9mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICAgICAsIGF0dHJp
YnV0ZXMoMCkKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgIH0K
ICAgICAKQEAgLTkzLDYgKzk2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgICAg
ICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMpCisgICAgICAgICwgaGFzSW5mZXJyZWRUeXBlKGZhbHNlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHRoaXMtPmF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlcyk7CiAgICAgfQpA
QCAtMzIzLDYgKzMyNyw3IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYs
IFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJv
cGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRUeXBlKTsK
IAogICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBpbnRlcm5hbGlzaCBtZXRob2QuIEl0IHdpbGwg
Y2FsbCB5b3VyIGZ1bmN0b3Igd2hpbGUgcG9zc2libHkgaG9sZGluZyB0aGUKICAgICAvLyBTdHJ1
Y3R1cmUncyBsb2NrLiBUaGVyZSBpcyBubyBndWFyYW50ZWUgd2hldGhlciB0aGUgbG9jayBpcyBo
ZWxkIG9yIG5vdCBpbiBhbnkgcGFydGljdWxhcgpAQCAtNDgxLDYgKzQ4Niw0MCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJ
Zk5lY2Vzc2FyeSh2bSk7CiAgICAgfQogCisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1faW5mZXJyZWRUeXBlVGFibGU7CisgICAgfQor
CisgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGVGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKKyAgICB7CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVy
cmVkVHlwZVRhYmxlLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlLT5nZXQodWlkKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yIGluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
KyAgICB7CisgICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHJlc3VsdCA9IGluZmVycmVkVHlwZUZv
cih1aWQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZGVzY3JpcHRvcigpOworICAgICAg
ICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHdpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQor
ICAgIHsKKyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkgfHwgKCFzaG91bGRPcHRpbWl6
ZSAmJiAhbV9pbmZlcnJlZFR5cGVUYWJsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1p
emUsIEluZmVycmVkVHlwZVRhYmxlOjpOZXdQcm9wZXJ0eSk7CisgICAgfQorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCB3aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgIFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRPcHRpbWl6
ZSkKKyAgICB7CisgICAgICAgIGlmIChoYXNCZWVuRGljdGlvbmFyeSgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNob3VsZE9wdGltaXplLCBJbmZlcnJlZFR5cGVUYWJsZTo6T2xkUHJvcGVydHkpOworICAg
IH0KKwogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNW
YWx1ZSk7CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgbWF0
Y2ggZW5vdWdoIHRoYXQgdGhpcyBvbmUgY291bGQgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbnMKQEAg
LTYzMiw2ICs2NzEsOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3RhcnRXYXRjaGluZ0lu
dGVybmFsUHJvcGVydGllcyhWTSYpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3aWxs
U3RvcmVWYWx1ZVNsb3coCisgICAgICAgIFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
LCBJbmZlcnJlZFR5cGVUYWJsZTo6U3RvcmVkUHJvcGVydHlBZ2UpOworCiAgICAgc3RhdGljIGNv
bnN0IGludCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3QgaW50
IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCkBAIC02NTUs
NiArNjk3LDggQEAgcHJpdmF0ZToKICAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBw
cm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIg
dGhyZWFkLgogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVV
bnNhZmU7CiAKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlVGFibGU+IG1faW5mZXJyZWRU
eXBlVGFibGU7CisKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9u
V2F0Y2hwb2ludFNldDsKIAogICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IDwgMjU2LCBmaXJzdE91dE9mTGluZU9mZnNldF9maXRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE4OTky
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03NSwxOSArNzUsMTkgQEAgaW5saW5lIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjpzdG9yZWRQcm90bwogCiBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpOwotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0g
ICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsK
LSAgICBpZiAoIXByb3BlcnR5VGFibGUpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0Owot
Ci0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVy
dHlOYW1lLnVpZCgpKTsKLSAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxp
ZE9mZnNldDsKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRU
eXBlOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5m
ZXJyZWRUeXBlKTsKIH0KICAgICAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0
cmlidXRlcykKIHsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICByZXR1cm4gZ2V0KHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgYm9vbCYgaGFzSW5mZXJyZWRU
eXBlKQorewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQo
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKQEAgLTEwMSw2ICsxMDEsNyBA
QCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgICAgIHJldHVy
biBpbnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwor
ICAgIGhhc0luZmVycmVkVHlwZSA9IGVudHJ5LT5oYXNJbmZlcnJlZFR5cGU7CiAgICAgcmV0dXJu
IGVudHJ5LT5vZmZzZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkhvc3RDYWxs
UmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVt
ZW50YWxTd2VlcGVyLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0FQSVZh
bHVlV3JhcHBlci5oIgpAQCAtMjQxLDYgKzI0Miw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywg
UHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHdlYWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNl
dCgqdGhpcywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIGluZmVycmVkVHlwZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVHlwZTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGluZmVycmVkVHlwZVRh
YmxlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLnNl
dCgqdGhpcywgRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGV4Y2VwdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIEV4Y2VwdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb21pc2VEZWZlcnJlZFN0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJl
dmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwMiw2ICszMDIsOCBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWFr
TWFwRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVlU3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVN0cnVjdHVyZTsKKyAg
ICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFR5cGVUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGV4Y2VwdGlvblN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNl
RGVmZXJyZWRTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3Byb3AtdHlwZS1vYmplY3QtdGhlbi1zdHJpbmcuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtb2JqZWN0LXRoZW4tc3RyaW5n
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9w
cm9wLXR5cGUtb2JqZWN0LXRoZW4tc3RyaW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjUgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZiA9PSB7dG9TdHJpbmc6ZnVu
Y3Rpb24oKSB7IHJldHVybiAiaGVsbG8iOyB9fTsKK30KKworZnVuY3Rpb24gYmFyKG8sIHYpIHsK
KyAgICBvLmYgPSB2OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKwordmFy
IG8gPSB7fTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKQorICAgIGJhcihvLCB7fSk7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28o
byk7CisgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworYmFyKG8sICJoZWxsbyIpOwordmFyIHJlc3VsdCA9
IGZvbyhvKTsKK2lmIChyZXN1bHQgIT09IHRydWUpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHJvcC10eXBlLXN0cmluZy10aGVuLW9iamVjdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1zdHJpbmctdGhlbi1v
YmplY3QuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3Byb3AtdHlwZS1zdHJpbmctdGhlbi1vYmplY3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mICsgIiB3b3JsZCI7
Cit9CisKK2Z1bmN0aW9uIGJhcihvLCB2KSB7CisgICAgby5mID0gdjsKK30KKworbm9JbmxpbmUo
Zm9vKTsKK25vSW5saW5lKGJhcik7CisKK3ZhciBvID0ge307Citmb3IgKHZhciBpID0gMDsgaSA8
IDU7ICsraSkKKyAgICBiYXIobywgImhlbGxvIik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPSAi
aGVsbG8gd29ybGQiKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7Cit9CisKK2JhcihvLCB7dG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gImhlbGxvIjsg
fX0pOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gImhlbGxvIHdvcmxkIikK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGluZmVyIHByb3BlcnR5IHR5cGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2MTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9IYXNoVGFibGUu
aDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlQWRkUmVzdWx0OjpIYXNoVGFibGVBZGRSZXN1bHQp
OiBNYWtlIGl0IHBvc3NpYmxlIHRvIHNheSAiSGFzaE1hcDo6QWRkUmVzdWx0IHJlc3VsdCIgd2l0
aG91dCBhc3NpZ25pbmcgYW55dGhpbmcgdG8gaXQgeWV0LgorICAgICAgICAqIHd0Zi9QcmludFN0
cmVhbS5oOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKTogQmVlZiB1cCBwcmludGluZyBv
ZiBzb21lIGNvbW1vbiBXVEYgdHlwZXMsIGluIHBhcnRpY3VsYXIgUmVmUHRyPFVuaXF1ZWRTdHJp
bmdJbXBsPi4KKwogMjAxNS0wOS0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBZGQgU2hhZG93Um9vdCBpbnRlcmZhY2UgYW5kIEVsZW1lbnQucHJvdG90eXBl
LmF0dGFjaFNoYWRvdwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNv
dXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yVHlwZT4gc3RydWN0IEhhc2hUYWJsZUFkZFJlc3VsdCB7CisgICAgICAgIEhhc2hUYWJsZUFk
ZFJlc3VsdCgpIDogaXNOZXdFbnRyeShmYWxzZSkgeyB9CiAgICAgICAgIEhhc2hUYWJsZUFkZFJl
c3VsdChJdGVyYXRvclR5cGUgaXRlciwgYm9vbCBpc05ld0VudHJ5KSA6IGl0ZXJhdG9yKGl0ZXIp
LCBpc05ld0VudHJ5KGlzTmV3RW50cnkpIHsgfQogICAgICAgICBJdGVyYXRvclR5cGUgaXRlcmF0
b3I7CiAgICAgICAgIGJvb2wgaXNOZXdFbnRyeTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50
U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTc0LDEyICs3NSwxNCBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBwcmludEludGVybmFsKFByCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgY29uc3QgU3RyaW5nSW1wbCopOwogaW5saW5lIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgeyBw
cmludEludGVybmFsKG91dCwgYml0d2lzZV9jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkp
OyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IFVu
aXF1ZWRTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgYml0d2lzZV9jYXN0
PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CitpbmxpbmUgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsJiB2YWx1ZSkgeyBwcmlu
dEludGVybmFsKG91dCwgJnZhbHVlKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBjaGFyKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgQ1N0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRp
Y19jYXN0PGNvbnN0IENTdHJpbmcmPih2YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIFN0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQs
IHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRl
cm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CiBpbmxp
bmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEF0b21pY1N0cmluZ0ltcGwq
IHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBBdG9taWNTdHJp
bmdJbXBsKj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0
YXRpY19jYXN0PGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQoraW5saW5lIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVbmlxdWVkU3RyaW5nSW1wbCYgdmFs
dWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsICZ2YWx1ZSk7IH0KIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBib29sKTsKIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBzaWduZWQgY2hhcik7IC8vIE5PVEU6
IHRoaXMgcHJpbnRzIGFzIGEgbnVtYmVyLCBub3QgYXMgYSBjaGFyYWN0ZXI7IHVzZSBDaGFyYWN0
ZXJEdW1wIGlmIHlvdSB3YW50IHRoZSBjaGFyYWN0ZXIKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsgLy8gTk9URTogc2Vl
IGFib3ZlLgpAQCAtMTY5LDYgKzE3MiwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgY29uCiAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHZhbHVlLmdldCgpKSk7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgUmVmUHRyPFQ+JiB2YWx1ZSkKK3sKKyAgICBvdXQucHJpbnQocG9pbnRlckR1
bXAodmFsdWUuZ2V0KCkpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
IGNsYXNzIFZhbHVlSW5Db250ZXh0IHsKIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261483</attachid>
            <date>2015-09-17 21:34:59 -0700</date>
            <delta_ts>2015-09-17 22:12:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>226250</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyOSBA
QAorMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgcHJvcGVydHkgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODYxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGJyaW5ncyByZWN1cnNpdmUgdHlw
ZSBpbmZlcmVuY2UgdG8gSmF2YVNjcmlwdCBvYmplY3QgcHJvcGVydGllcyBpbiBKU0MuIFdlIGNo
ZWNrIHRoYXQgYQorICAgICAgICB2YWx1ZSBiZWluZyBzdG9yZWQgaW50byBhIHByb3BlcnR5IG9i
ZXlzIGEgcHJvcGVydHkncyB0eXBlIGJlZm9yZSB3ZSBkbyB0aGUgc3RvcmUuIElmIGl0IGRvZXNu
J3QsCisgICAgICAgIHdlIGJyb2FkZW4gdGhlIHByb3BlcnR5J3MgdHlwZSB0byBpbmNsdWRlIHRo
ZSBuZXcgdmFsdWUuIElmIG9wdGltaXplZCBjb2RlIHdhcyByZWx5aW5nIG9uIHRoZSBvbGQKKyAg
ICAgICAgdHlwZSwgd2UgZGVvcHRpbWl6ZSB0aGF0IGNvZGUuCisKKyAgICAgICAgVGhlIHR5cGUg
c3lzdGVtIHRoYXQgdGhpcyBzdXBwb3J0cyBpbmNsdWRlcyBpbXBvcnRhbnQgcHJpbWl0aXZlIHR5
cGVzIGxpa2UgSW50MzIgYW5kIEJvb2xlYW4uIEJ1dAorICAgICAgICBpdCBnb2VzIGZ1cnRoZXIg
YW5kIGFsc28gaW5jbHVkZXMgYSB0eXBlIGtpbmQgY2FsbGVkIE9iamVjdFdpdGhTdHJ1Y3R1cmUs
IHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAgICAgZXhwZWN0IHRoZSBwcm9wZXJ0eSB0byBhbHdh
eXMgcG9pbnQgdG8gb2JqZWN0cyB3aXRoIGEgcGFydGljdWxhciBzdHJ1Y3R1cmUuIFRoaXMgb25s
eSB3b3JrcyBmb3IKKyAgICAgICAgbGVhZiBzdHJ1Y3R1cmVzIChpLmUuIHN0cnVjdHVyZXMgdGhh
dCBoYXZlIGEgdmFsaWQgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHNldCkuIEludmFsaWRhdGlvbiBv
ZiB0aGUKKyAgICAgICAgdHJhbnNpdGlvbiBzZXQgY2F1c2VzIHRoZSBwcm9wZXJ0eSB0eXBlIHRv
IGJlY29tZSBPYmplY3QgKG1lYW5pbmcgYW4gb2JqZWN0IHdpdGggYW55IHN0cnVjdHVyZSkuCisg
ICAgICAgIFRoaXMgY2FwYWJpbGl0eSBnaXZlcyB1cyByZWN1cnNpdmUgdHlwZSBpbmZlcmVuY2Uu
IEl0J3MgcG9zc2libGUgZm9yIGFuIGV4cHJlc3Npb24gbGlrZSAiby5mLmcuaCIKKyAgICAgICAg
dG8gZXhlY3V0ZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrcyBpZiAuZiBhbmQgLmcgYXJlIGJvdGgg
T2JqZWN0V2l0aFN0cnVjdHVyZS4KKworICAgICAgICBUaGUgdHlwZSBpbmZlcmVuY2Ugb2YgYSBw
cm9wZXJ0eSBpcyB0cmFja2VkIGJ5IGFuIEluZmVycmVkVHlwZSBpbnN0YW5jZSwgd2hpY2ggaXMg
YSBKU0NlbGwuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCBpdCBtYW5hZ2VzIGl0cyBvd24gbWVt
b3J5LiBUaGF0J3MgY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIERGRyBpcyBpbnRl
cmVzdGVkIGluCisgICAgICAgIG9uZSBvZiB0aGVzZSwgaXQgY2FuIGp1c3QgbGlzdCB0aGUgSW5m
ZXJyZWRUeXBlIGFzIGEgd2VhayByZWZlcmVuY2UgaW4gYWRkaXRpb24gdG8gc2V0dGluZyBhCisg
ICAgICAgIHdhdGNocG9pbnQuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBkcm9wcGVkIGJ5IHRoZSBvd25pbmcgc3RydWN0dXJlLCB0aGUgREZHCisgICAgICAg
IHdvbid0IHJlYWQgYSBkYW5nbGluZyBwb2ludGVyLiBBIG1hcHBpbmcgZnJvbSBwcm9wZXJ0eSBu
YW1lIHRvIEluZmVycmVkVHlwZSBpcyBpbXBsZW1lbnRlZCBieQorICAgICAgICBJbmZlcnJlZFR5
cGVUYWJsZSwgd2hpY2ggaXMgYWxzbyBhIEpTQ2VsbC4gRWFjaCBTdHJ1Y3R1cmUgbWF5IHBvaW50
IHRvIHNvbWUgSW5mZXJyZWRUeXBlVGFibGUuCisKKyAgICAgICAgVGhpcyBmZWF0dXJlIGNhdXNl
cyBwcm9ncmFtcyB0byBiZSBoYXBwaWVyIChydW4gZmFzdGVyIHdpdGhvdXQgb3RoZXJ3aXNlIGRv
aW5nIGJhZCB0aGluZ3MgbGlrZQorICAgICAgICB1c2luZyBsb3RzIG9mIG1lbW9yeSkgd2hlbiBm
b3VyIGNvbmRpdGlvbnMgaG9sZDoKKworICAgICAgICAxKSBBIHByb3BlcnR5IGNvbnZlcmdlcyB0
byBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgd2Ugc3VwcG9ydC4KKyAgICAgICAgMikgVGhlIHByb3Bl
cnR5IGlzIGxvYWRlZCBmcm9tIG1vcmUgZnJlcXVlbnRseSB0aGFuIGl0IGlzIHN0b3JlZCB0by4K
KyAgICAgICAgMykgVGhlIHN0b3JlcyBhcmUgYWxsIGNhY2hlZCwgc28gdGhhdCB3ZSBzdGF0aWNh
bGx5IGVtaXQgYSB0eXBlIGNoZWNrLgorICAgICAgICA0KSBXZSBkb24ndCBhbGxvY2F0ZSBhIGxv
dCBvZiBtZXRhLWRhdGEgZm9yIHRoZSBwcm9wZXJ0eSdzIHR5cGUuCisKKyAgICAgICAgV2UgbWF4
aW1pemUgdGhlIGxpa2VsaWhvb2Qgb2YgKDEpIGJ5IGhhdmluZyBhIHJpY2ggdHlwZSBzeXN0ZW0u
IEJ1dCBoYXZpbmcgYSByaWNoIHR5cGUgc3lzdGVtIG1lYW5zCisgICAgICAgIHRoYXQgYSByZWZs
ZWN0aXZlIHB1dCB0byBhIHByb3BlcnR5IGhhcyB0byBoYXZlIGEgbGFyZ2Ugc3dpdGNoIG92ZXIg
dGhlIGluZmVycmVkIHR5cGUgdG8gZGVjaWRlIGhvdworICAgICAgICB0byBkbyB0aGUgdHlwZSBj
aGVjay4gVGhhdCdzIHdoeSB3ZSBuZWVkICgzKS4gV2UgZW5zdXJlICgzKSBieSBoYXZpbmcgZXZl
cnkgcmVmbGVjdGl2ZSBwcm9wZXJ0eQorICAgICAgICBzdG9yZSAoaS5lLiBwdXREaXJlY3RJbnRl
cm5hbCBpbiBhbnkgY29udGV4dCB0aGF0IGlzbid0IFB1dEJ5SWQpIGZvcmNlIHRoZSBpbmZlcnJl
ZCB0eXBlIHRvIGJlY29tZQorICAgICAgICBUb3AuIFdlIGRvbid0IHJlYWxseSB3b3JyeSBhYm91
dCBlbnN1cmluZyAoMik7IHRoaXMgaXMgc3RhdGlzdGljYWxseSB0cnVlIGZvciBtb3N0IHByb2dy
YW1zCisgICAgICAgIGFscmVhZHkuCisKKyAgICAgICAgUHJvYmFibHkgdGhlIG1vc3Qgc3VidGxl
IHRyaWNrZXJ5IGdvZXMgaW50byAoNCkuIExvZ2ljYWxseSB3ZSdkIGxpa2UgdG8gc2F5IHRoYXQg
ZWFjaAorICAgICAgICAoU3RydWN0dXJlLCBQcm9wZXJ0eSkgbWFwcyB0byBpdHMgb3duIEluZmVy
cmVkVHlwZS4gSWYgc3RydWN0dXJlIFMxIGhhcyBhIHRyYW5zaXRpb24gZWRnZSB0byBTMiwKKyAg
ICAgICAgdGhlbiB3ZSBjb3VsZCBlbnN1cmUgdGhhdCB0aGUgSW5mZXJyZWRUeXBlIEkxIHdoZXJl
IChTMSwgUHJvcGVydHkpLT5JMSBoYXMgYSBkYXRhIGZsb3cgY29uc3RyYWludAorICAgICAgICB0
byBJMiB3aGVyZSAoUzIsIFByb3BlcnR5KS0+STIuIFRoYXQgd291bGQgd29yaywgYnV0IGl0IHdv
dWxkIGludm9sdmUgYSBsb3Qgb2YgbWVtb3J5LiBBbmQgd2hlbiBJMQorICAgICAgICBnZXRzIGlu
dmFsaWRhdGVkIGluIHNvbWUgd2F5LCBpdCB3b3VsZCBoYXZlIHRvIHRlbGwgSTIgYWJvdXQgaXQs
IGFuZCB0aGVuIEkyIG1pZ2h0IHRlbGwgb3RoZXIKKyAgICAgICAgSW5mZXJyZWRUeXBlIG9iamVj
dHMgZG93bnN0cmVhbS4gVGhhdCdzIG1hZG5lc3MuIFNvLCB0aGUgZmlyc3QgbWFqb3IgY29tcHJv
bWlzZSB0aGF0IHdlIG1ha2UgaGVyZQorICAgICAgICBpcyB0byBzYXkgdGhhdCBpZiBzb21lIHBy
b3BlcnR5IGhhcyBzb21lIEluZmVycmVkVHlwZSBhdCBzb21lIFN0cnVjdHVyZSwgdGhlbiBhbnl0
aW1lIHdlCisgICAgICAgIHRyYW5zaXRpb24gZnJvbSB0aGF0IFN0cnVjdHVyZSwgdGhlIG5ldyBT
dHJ1Y3R1cmUgc2hhcmVzIHRoZSBzYW1lIEluZmVycmVkVHlwZSBmb3IgdGhhdCBwcm9wZXJ0eS4K
KyAgICAgICAgVGhpcyB1bmlmaWVzIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBvdmVyIHRoZSBl
bnRpcmUgdHJhbnNpdGlvbiB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBTdHJ1Y3R1cmUgYXQKKyAgICAg
ICAgd2hpY2ggdGhlIHByb3BlcnR5IHdhcyBhZGRlZC4gQnV0IHRoaXMgd291bGQgc3RpbGwgbWVh
biB0aGF0IGVhY2ggU3RydWN0dXJlIHdvdWxkIGhhdmUgaXRzIG93bgorICAgICAgICBJbmZlcnJl
ZFR5cGVUYWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGF0IGJlY2F1c2UgZXhwZXJpZW5jZSB3aXRoIFBy
b3BlcnR5VGFibGUgc2hvd3MgdGhhdCB0aGlzIGNhbiBiZQorICAgICAgICBhIG1ham9yIG1lbW9y
eSBob2cuIFNvLCB3ZSBkb24ndCBjcmVhdGUgYW4gSW5mZXJyZWRUeXBlVGFibGUgdW50aWwgc29t
ZW9uZSBhZGRzIGEgcHJvcGVydHkgdGhhdCBpcworICAgICAgICBzdWJqZWN0IHRvIHR5cGUgaW5m
ZXJlbmNlIChpLmUuIGl0IHdhcyBhZGRlZCBub24tcmVmbGVjdGl2ZWx5KSwgYW5kIHdlIHNoYXJl
IHRoYXQgSW5mZXJyZWRUeXBlVGFibGUKKyAgICAgICAgd2l0aCB0aGUgZW50aXJlIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIHRyZWUgcm9vdGVkIGF0IHRoZSBTdHJ1Y3R1cmUgdGhhdCBoYWQgdGhlIGZp
cnN0IGluZmVycmVkCisgICAgICAgIHByb3BlcnR5LiBXZSBhbHNvIGRyb3AgdGhlIEluZmVycmVk
VHlwZVRhYmxlIGFueXRpbWUgdGhhdCB3ZSBkbyBhIGRpY3Rpb25hcnkgdHJhbnNpdGlvbiwgYW5k
IHdlCisgICAgICAgIGRvbid0IGFsbG93IGZ1cnRoZXIgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2Ug
aWYgYSBzdHJ1Y3R1cmUgaGFkIGV2ZXIgYmVlbiBhIGRpY3Rpb25hcnkuCisKKyAgICAgICAgVGhp
cyBpcyBhIDMlIHNwZWVkLXVwIG9uIE9jdGFuZSBhbmQgYSAxMiUgc3BlZWQtdXAgb24gS3Jha2Vu
IG9uIG15IHNldHVwLiBJdCdzIG5vdCBhIHNpZ25pZmljYW50CisgICAgICAgIHNsb3ctZG93biBv
biBhbnkgYmVuY2htYXJrIEkgcmFuLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YnJhbmNoVGVzdDY0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmJyYW5jaFRlc3Q2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
Ojp0ZXN0NjQpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1
dEJ5SWRGbGFncy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5oOgorICAgICAgICAoSlNDOjplbmNvZGVTdHJ1Y3R1cmVJ
RCk6CisgICAgICAgIChKU0M6OmRlY29kZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRWYXJpYW50OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkVmFyaWFudDo6cmVxdWlyZWRUeXBlKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEluc3RydWN0aW9uOjpVbmxpbmtlZElu
c3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChK
U0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKEpTQzo6SW5saW5lV2F0
Y2hwb2ludFNldDo6aXNCZWluZ1dhdGNoZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRD
b25zdGFudFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRC
eUlkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlY3RQdXRCeUlk
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjo6ZmlsdGVyQnlWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVy
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6c2V0VHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9y
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdl
T1NSRW50cnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNUeXBl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6
OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENv
bnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRH
ZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmFkZEJhc2VDaGVjayk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6RGVzaXJlZElu
ZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b3Bl
cmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpleHBlY3RlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjphZGQpOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlND
OjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNp
cmVkSW5mZXJyZWRUeXBlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElu
ZmVycmVkVHlwZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRB
ZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hw
b2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRX
YXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dCk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAg
ICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNoZWQpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1NhZmVUb0xv
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpp
bmZlcnJlZFZhbHVlRm9yUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp0cnlH
ZXRDb25zdGFudENsb3N1cmVWYXIpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmluZmVycmVkVHlwZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkZmcvREZH
SW5mZXJyZWRUeXBlQ2hlY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjppbnNlcnRJ
bmZlcnJlZFR5cGVDaGVjayk6CisgICAgICAgICogZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcm9wZXJ0eVR5
cGVLZXkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpQcm9w
ZXJ0eVR5cGVLZXkpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0
b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpzdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6dWlkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVy
dHlUeXBlS2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Omlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVL
ZXk6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpkZWxldGVkVUlEKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVR5cGVPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b25seVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zm9yRWFjaCk6CisgICAgICAgICogZGZnL0RGR1Vz
ZUtpbmQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcv
REZHVXNlS2luZC5oOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAg
ICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZh
bGlkYXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUNoZWNrQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06Om51bWJlck9yTm90Q2VsbFRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNoZWNrSW5mZXJyZWRUeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU1hY2hpbmVJbnQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRl
Y29kZWRDb2RlTWFwRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJ
Zk5vdFR5cGUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTik6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmJyYW5jaElmRXF1YWwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJy
YW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZD
ZWxsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdE90aGVyKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkludDMyKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdEludDMyKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk51bWJlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6YnJhbmNoSWZOb3ROdW1iZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmRW1wdHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5j
aFN0cnVjdHVyZSk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c206CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SW5mZXJyZWRUeXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6Zm9yRmxhZ3MpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnB1dEJ5SWRGbGFncyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvcjo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJl
bW92ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
c3Vic3VtZXMpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAp
OgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZSk6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6Y2FuV2F0Y2gpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmR1bXApOgorICAgICAgICAoSlNDOjpJ
bmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6bWFrZVRvcFNsb3cpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBl
OjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFR5cGVUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpnZXQpOgorICAgICAg
ICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlw
ZVRhYmxlOjpJbmZlcnJlZFR5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRh
YmxlOjp+SW5mZXJyZWRUeXBlVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmdldCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9wcm9wLXR5cGUtb2JqZWN0LXRoZW4tc3RyaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5y
ZXR1cm4uby5mLnRvU3RyaW5nKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9wcm9wLXR5cGUtc3RyaW5nLXRoZW4tb2JqZWN0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAodG9TdHJpbmcpOgor
CiAyMDE1LTA5LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
MC4wIHNob3VsZCByZWFsbHkgYmUgMC4wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKICAgICBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKyAg
ICBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCiAgICAgZGZnL0RGR0luc2VydGlvblNldC5j
cHAKICAgICBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtNDk2LDYgKzQ5Nyw4IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0lkZW50aWZpZXIu
Y3BwCiAgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9JbmZlcnJlZFZh
bHVlLmNwcAorICAgIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAorICAgIHJ1bnRpbWUvSW5mZXJy
ZWRUeXBlVGFibGUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAg
IHJ1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDI3LDYgKzQyNyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3Jh
cGhTYWZlcG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hl
YXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnNlcnRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAiIC8+
CkBAIC03NDUsNiArNzQ2LDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SWRlbnRpZmllci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
ZGV4aW5nVHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
ZmVycmVkVmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmZlcnJlZFR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmZlcnJlZFR5cGVUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KQEAg
LTExMzIsNiArMTEzNSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1NF
UGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEQ0VQaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkVHJh
bnNpdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVk
V2F0Y2hwb2ludHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaCIgLz4KQEAgLTExNjAsNiArMTE2NCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luZmVycmVkVHlwZUNoZWNrLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5zZXJ0aW9uU2V0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRp
b25QaGFzZS5oIiAvPgpAQCAtMTIxMSw2ICsxMjE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvcGVydHlUeXBlS2V5Lmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
QEAgLTE1ODMsNiArMTU4OSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEluZGV4aW5nSGVhZGVySW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ1R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5mZXJyZWRWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbmZlcnJlZFR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSW5mZXJyZWRUeXBlVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbnQxNkFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEludDMyQXJyYXkuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTI1MSw2ICsxMjUxLDkgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAiPgogICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAiPgorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTg1MSw2ICsxODU0LDgg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGlyZWN0QXJndW1lbnRzLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGlyZWN0QXJndW1lbnRz
T2Zmc2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJy
ZWRWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVy
cmVkVHlwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVy
cmVkVHlwZVRhYmxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
U2NvcGVPZmZzZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxT
Y29wZWRBcmd1bWVudHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxTY29wZWRBcmd1bWVudHNUYWJsZS5jcHAiIC8+CkBAIC0zNjYxLDYgKzM2NjYsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIj4KICAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIj4KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHRGVzaXJlZFRyYW5zaXRpb25zLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTM3MjQsNiArMzczMiw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0luZmVycmVkVHlwZUNoZWNrLmgiPgorICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgiPgogICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQ0MDksNiArNDQyMCw5IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCI+CiAg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb3BlcnR5VHlwZUtleS5oIj4KKyAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRXhpdFByb3BlcnR5VmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ1Miw2ICs0NDY2LDggQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY09mZnNldC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVHlwZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFR5cGVUYWJsZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTY29wZU9mZnNldC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTY29wZWRBcmd1bWVudHMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2NvcGVkQXJndW1lbnRzVGFibGUuaCIgLz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJp
bmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjA3
NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgwMDEw
MjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07CisJ
CTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDExMDY2
MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzOTcx
NEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQxNEJD
RjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBD
b2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4
MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJBOEMz
MjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgz
N0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBGRkI5
MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRC
MDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVE
QiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRo
R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVC
MUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5j
cHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzky
MTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFE
RDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtl
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzky
MTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkM5OUQxMTg0RUM4QUQwMDlD
MTBBQiAvKiBDb25zdGFudE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlE
NDE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5OUQyMTg0
RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovOyB9
OwogCQkwRkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5
MTcsNiArMTkyNSw4IEBACiAJCTBGMDQzOTZDMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5l
ZExpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbWJpbmVk
TGl2ZW5lc3MuaDsgcGF0aCA9IGRmZy9ERkdDb21iaW5lZExpdmVuZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMDVDM0IyMTY4M0NGOEYwMEJBRjQ1QiAvKiBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDc3NkJEMTRG
RjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKSVRDb21waWxhdGlvbkVmZm9ydC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAv
KiBJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJy
ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4Mzk3MTRCQ0Y0NUEw
MDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBMTEludFRodW5rcy5jcHA7IHBhdGggPSBsbGludC9MTEludFRodW5rcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4Mzk4MTRCQ0Y0NUEwMDg4NUI0RiAvKiBM
TEludFRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludFRodW5r
cy5oOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMzg2LDYgKzIzOTYsOCBAQAogCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA5MTQwNDNCRDIw
MENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZDODQxNjYxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luZmVycmVkVHlwZUNo
ZWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oOyBwYXRoID0gZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGMzAxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNTczLDYgKzI1ODUsMTAgQEAKIAkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBv
bHltb3JwaGljQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHlt
b3JwaGljQWNjZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM2MUFG
NDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFR5cGVvZlR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZCNkMzNzFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlb2ZUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGVUYWJsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2
NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmZlcnJlZFR5cGVUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmg7IHBhdGgg
PSBkZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BlcnR5VHlwZUtleS5oOyBwYXRo
ID0gZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJp
bmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFy
cmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRkM5OUQzMTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlCdWZmZXJO
ZXV0ZXJpbmdXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjUx
LDggKzQ2NjcsOCBAQAogCQkJCUJDMDJFOThCMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3Rh
bmNlLmggKi8sCiAJCQkJQkMwMkU5MDYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBl
LmNwcCAqLywKIAkJCQlCQzAyRTkwNzBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUu
aCAqLywKLQkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi8sCiAJ
CQkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJRkUx
QzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCTBGMTJERTBEMTk3
OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlE
NUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0Qw
MEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLywKQEAgLTQ2ODYsNiArNDcwMiwxMCBA
QAogCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMu
aCAqLywKIAkJCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAq
LywKIAkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCisJ
CQkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8sCisJCQkJ
MEYwQTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovLAorCQkJCTBGRkM5
MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi8sCisJCQkJMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8sCiAJCQkJMEZG
OEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovLAogCQkJCTBGRjhC
REU5MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8sCiAJCQkJRTE3ODYzNkMw
RDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLApAQCAtNDczNiwx
MCArNDc1NiwxMCBAQAogCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaCAqLywKIAkJCQlBN0JEQUVDNDE3RjRFQTE0MDBGNjE0MEMgLyogSlNB
cnJheUl0ZXJhdG9yLmNwcCAqLywKIAkJCQlBN0JEQUVDNTE3RjRFQTE0MDBGNjE0MEMgLyogSlNB
cnJheUl0ZXJhdG9yLmggKi8sCi0JCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91
bmRGdW5jdGlvbi5jcHAgKi8sCi0JCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91
bmRGdW5jdGlvbi5oICovLAogCQkJCThCMEY0MjRCMUFCRDZERTIwMDM5MTdFQSAvKiBKU0Fycm93
RnVuY3Rpb24uY3BwICovLAogCQkJCThCMEY0MjRBMUFCRDZEMkYwMDM5MTdFQSAvKiBKU0Fycm93
RnVuY3Rpb24uaCAqLywKKwkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1
bmN0aW9uLmNwcCAqLywKKwkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1
bmN0aW9uLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNw
cCAqLywKIAkJCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCAqLywKIAkJ
CQlCQzdGOEZCQTBFMTlEMUVGMDA4NjMyQzAgLyogSlNDZWxsLmNwcCAqLywKQEAgLTUwNDMsOSAr
NTA2Myw5IEBACiAJCQkJMEZFMDUwMjQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oICov
LAogCQkJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCiAJCQkJRTE4RTNB
NTYwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmggKi8sCi0JCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIz
RjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBW
TUVudHJ5U2NvcGUuY3BwICovLAogCQkJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuaCAqLywKKwkJCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVz
LmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywK
IAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLywKIAkJCQkxNEJG
Q0U2ODEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggKi8sCkBAIC01MTk3LDYgKzUyMTcs
NyBAQAogCQkJCTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAog
CQkJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3Bw
ICovLAogCQkJCTBGOEYyQjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmll
cnMuaCAqLywKKwkJCQkwRkZDOTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVy
cmVkVHlwZS5oICovLAogCQkJCUMyQzBGN0NCMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVk
VHJhbnNpdGlvbnMuY3BwICovLAogCQkJCUMyQzBGN0NDMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdE
ZXNpcmVkVHJhbnNpdGlvbnMuaCAqLywKIAkJCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLywKQEAgLTUyNDEsNiArNTI2Miw4IEBACiAJCQkJ
MEYyRkNDRjMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmggKi8sCiAJCQkJ
MEZCMTc2NUMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgKi8sCiAJCQkJ
MEZCMTc2NUQxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5oICovLAorCQkJCTBG
Qzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgKi8sCisJ
CQkJMEZDODQxNjcxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmggKi8s
CiAJCQkJMEZCMTRFMjAxODEyNTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5o
ICovLAogCQkJCTBGQjE0RTIyMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBw
ZXJJbmxpbmVzLmggKi8sCiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcCAqLywKQEAgLTUyNzMsMTAgKzUyOTYsMTAgQEAKIAkJCQkwRkI0
QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQlBNzY3
QjVCMzE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3Bw
ICovLAogCQkJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5oICovLAotCQkJCTBGNTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlF
eGl0LmNwcCAqLywKLQkJCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5o
ICovLAogCQkJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5jcHAgKi8sCiAJCQkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8sCisJCQkJMEY1ODc0RUIxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuY3BwICovLAorCQkJCTBGNTg3NEVDMTk0RkVCMTIwMEFBQjJDMSAv
KiBERkdNYXlFeGl0LmggKi8sCiAJCQkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01p
bmlmaWVkR3JhcGguY3BwICovLAogCQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdN
aW5pZmllZEdyYXBoLmggKi8sCiAJCQkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLywKQEAgLTUzNDQsNiArNTM2Nyw3IEBACiAJCQkJMEYzRTAxQTkxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLywKIAkJCQkwRjJCOUNFMDE5RDBC
QTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovLAogCQkJCTBGMkI5
Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oICovLAorCQkJ
CTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLywKIAkJ
CQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKIAkJCQkw
RkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJMEYzQTFC
RjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLywKQEAg
LTU5MzQsNiArNTk1OCw3IEBACiAJCQkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVy
cmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ0MkNCMjUxQTZDREI4QzAwNUQz
RDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlGRTFDMEZGRDFCMTkzRTk4
MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZDOTIxNDFCOTRF
ODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1By
b2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyog
QmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTYwNDcsNiArNjA3Miw3IEBA
CiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdCMDI0NzU5MUI4NjhFQjcwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50YXhD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RDE0QkU3MjdBMDBBREM2NEIgLyog
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwQTc1MjMxQjk0
QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgz
QTcxNEJDRjUwNzAwODg1QjRGIC8qIENvZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTYzMjYsMTIgKzYzNTIsMTQgQEAKIAkJCQkwRjI1RjFCNDE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlE
MzM5QjE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3RhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQzg0MTY5MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdGQ0MyNkQxN0EwQjZBQTAwNzg2RDFBIC8qIEZUTFN3aXRjaENh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkUyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExU
aHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBG
VExUeXBlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0
NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RB
NTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3OUEgLyogRlRMV2Vp
Z2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRM
V2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5Nyw2ICs2NTI1LDcgQEAKIAkJ
CQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25JbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2
NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNzQzOSw2ICs3NDY4LDcgQEAKIAkJCQkxNDI4MDgyRTEwN0VDMDU3
MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNG
MTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlw
ZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVBMDMwMEVEMDE5MSAv
KiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2
MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2
NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4
MTksNiArNzg0OSw3IEBACiAJCQkJMEZGMDU0RjkxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0aW9uRnV6ei5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQTE2N0JBQkVF
MDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFENENG
NzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzg0
MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5MUY2MDBCQUY1OUMgLyog
SlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2MDA0MjdB
NDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4NTMsNiAr
Nzg4NCw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4NDIxQzAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5
QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5NzNCMjYwMDU2MTJCMSAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUI2QTc0RDE4
QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTg1Myw2ICsxODUzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEp1bXAobWFrZUJyYW5j
aChjb25kKSk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tNjQgbWFzaykKKyAgICB7CisgICAgICAg
IG1vdmUobWFzaywgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCByZWcsIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CiAgICAgICAgIGxvYWQ2NChh
ZGRyZXNzLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDUs
NiArNjA1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakND
KHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJl
c3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTY0IG1hc2spCisg
ICAgeworICAgICAgICBtb3ZlKG1hc2ssIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVy
biBicmFuY2hUZXN0NjQoY29uZCwgcmVnLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgIH0KKwogICAg
IHZvaWQgdGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3Rl
ZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChtYXNrLm1f
dmFsdWUgPT0gLTEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5MSw2ICs2OTEsMTUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
YXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90
VHlwZSgKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCksIENDYWxsSGVscGVyczo6RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUg
dHlwZS5cbiIpOworICAgICAgICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0
KSkgewogICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVS
ZWdzLApAQCAtNzE0LDYgKzcyMywxNSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vz
c0dlbmVyYXRpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0cnVjdHVyZSgpLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKTsKIAorICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gbmV3
U3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5
cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRj
aC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSgKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCksIEND
YWxsSGVscGVyczo6RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUgdHlwZS5cbiIpOworICAg
ICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRS
ZWdpc3RlcnMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRG
bGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRGbGFncy5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CkBAIC0zNSwxNiArMzYsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHV0QnlJZEZs
YWdzIGZsYWdzKSB7Ci0gICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OwogICAgIENvbW1h
UHJpbnRlciBjb21tYSgifCIpOwogICAgIGlmIChmbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkKLSAg
ICAgICAgc3RyaW5nT3V0LnByaW50KGNvbW1hLCAiSXNEaXJlY3QiKTsKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiSXNEaXJlY3QiKTsKIAotICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0
LnRvQ1N0cmluZygpOwotICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQotICAgICAgICBvdXQucHJp
bnQoIk5vbmUiKTsKLSAgICBlbHNlCi0gICAgICAgIG91dC5wcmludChzdHJpbmcpOworICAgIElu
ZmVycmVkVHlwZTo6S2luZCBraW5kID0gSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoZmxhZ3Mp
OworICAgIG91dC5wcmludChjb21tYSwga2luZCk7CisgICAgaWYgKEluZmVycmVkVHlwZTo6aGFz
U3RydWN0dXJlKGtpbmQpKQorICAgICAgICBvdXQucHJpbnQoIjoiLCBiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4oZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
aAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsNzAgQEAKICNpZm5kZWYg
UHV0QnlJZEZsYWdzX2gKICNkZWZpbmUgUHV0QnlJZEZsYWdzX2gKIAorI2luY2x1ZGUgIlN0cnVj
dHVyZUlEVGFibGUuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0gUHV0QnlJZEZsYWdzIHsK
K2VudW0gUHV0QnlJZEZsYWdzIDogaW50cHRyX3QgewogICAgIFB1dEJ5SWROb25lID0gMCwKLSAg
ICBQdXRCeUlkSXNEaXJlY3QgPSAxCisKKyAgICAvLyBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQg
dGhlIHB1dF9ieV9pZCBpcyBkaXJlY3QuIFRoYXQgbWVhbnMgdGhhdCB3ZSBzdG9yZSB0aGUgcHJv
cGVydHkgd2l0aG91dAorICAgIC8vIGNoZWNraW5nIGlmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFz
IGEgc2V0dGVyLgorICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDB4MSwKKyAgICBQdXRCeUlkUGVyc2lz
dGVudEZsYWdzTWFzayA9IDB4MSwKKworICAgIC8vIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVz
dCBiZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBMb3dMZXZlbEludGVycHJldGVyLmFzbS4KKwor
ICAgIC8vIERldGVybWluaW5nIHRoZSByZXF1aXJlZCBpbmZlcnJlZCB0eXBlIGludm9sdmVzIGZp
cnN0IGNoZWNraW5nIHRoZSBwcmltYXJ5IHR5cGUgbWFzaywgYW5kIHRoZW4KKyAgICAvLyB1c2lu
ZyB0aGF0IHRvIGZpZ3VyZSBvdXQgdGhlIG1lYW5pbmcgb2YgdGhlIHNlY29uZGFyeSBtYXNrOgor
ICAgIC8vIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7CisgICAgLy8g
Y2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6CisgICAgLy8gICAgIHN3aXRjaCAoZmxh
Z3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAvLyAgICAgLi4uCisgICAgLy8g
ICAgIH0KKyAgICAvLyAgICAgYnJlYWs7CisgICAgLy8gY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgLy8gICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
ID0gZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpOworICAgIC8vICAgICBicmVhazsKKyAgICAvLyB9
CisgICAgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9IDB4NiwKKyAgICBQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgPSAweDAsIC8vIE5lZWQgdG8gY2hlY2sgdGhlIHNlY29uZGFyeSB0eXBlIG1h
c2sgZm9yIHRoZSB0eXBlLgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1
cmUgPSAweDIsIC8vIFNlY29uZGFyeSB0eXBlIGhhcyBzdHJ1Y3R1cmUgSUQuCisgICAgUHV0QnlJ
ZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQsIC8vIFNlY29uZGFy
eSB0eXBlIGhhcyBzdHJ1Y3R1cmUgSUQuCisKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sg
PSAtMHg4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgwLAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiA9IDB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90
aGVyID0gMHgxMCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciA9IDB4MjAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVTdHJpbmcgPSAweDI4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMCwK
KyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIgPSAweDM4LAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlVG9wID0gMHg0MAogfTsKIAoraW5saW5lIFB1dEJ5SWRGbGFncyBlbmNv
ZGVTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRCBpZCkKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFn
cz4oaWQpIDw8IDMpOworI2Vsc2UKKyAgICBQdXRCeUlkRmxhZ3MgcmVzdWx0ID0gYml0d2lzZV9j
YXN0PFB1dEJ5SWRGbGFncz4oaWQpOworICAgIEFTU0VSVCghKHJlc3VsdCAmIH5QdXRCeUlkU2Vj
b25kYXJ5VHlwZU1hc2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKK2lubGlu
ZSBTdHJ1Y3R1cmVJRCBkZWNvZGVTdHJ1Y3R1cmVJRChQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlSUQ+KGZs
YWdzID4+IDMpOworI2Vsc2UKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUlEPihm
bGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZyb20KICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAgICAgCi0gICAgICAg
IHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3Ry
dWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgIH0KIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5l
d1N0cnVjdHVyZUlEKTsKQEAgLTEwMyw3ICsxMDMsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICBzdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQsIG5ld1N0cnVjdHVyZS0+aW5mZXJy
ZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKIH0KIAogUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG1h
cCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTE2
Miw3ICsxNjMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAg
ICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewog
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpAQCAtMTkzLDcg
KzE5NCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsK
LSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVy
ZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTIwNiw3ICsyMDgsOCBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAg
ICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRp
dGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgp
LCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmluZmVycmVkVHlwZURlc2NyaXB0b3JG
b3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCkBAIC0zMjksOCArMzMyLDEwIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMg
YWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCisKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlh
bnQgPQorICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwg
b2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KQEAgLTM1NiwxMyArMzYxLDE2IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgfQogICAgIAogICAgICAgICAvLyBXZSBv
bmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJh
bnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJl
bnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsK
ICAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAot
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0
aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25k
aXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5pbmZlcnJlZFR5
cGVEZXNjcmlwdG9yRm9yKHVpZCkpKTsKICAgICAgICAgaWYgKCFkaWRBcHBlbmQpCiAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgUHV0QnlJZFZh
cmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fbmV3U3RydWN0dXJlID0gb3Ro
ZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlv
blNldDsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAgIG1fcmVxdWlyZWRUeXBl
ID0gb3RoZXIubV9yZXF1aXJlZFR5cGU7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMp
CiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CiAgICAgZWxzZQpAQCAtNTIsMTggKzUzLDIx
IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitQdXRCeUlk
VmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9y
ZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0
QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAg
IHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwpAQCAtNzEsNiArNzUsNyBAQCBQdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJl
ID0gbmV3U3RydWN0dXJlOwogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRU
eXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg1LDYgKzkw
LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICByZXN1bHQu
bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OwogICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGOjptb3ZlKGNhbGxMaW5rU3Rh
dHVzKTsKKyAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMzQsOSArMTQwLDEyIEBAIGJvb2wgUHV0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKIHsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIu
bV9vZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3JlcXVpcmVkVHlw
ZSAhPSBvdGhlci5tX3JlcXVpcmVkVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBSZXBsYWNlOgorICAgIGNhc2UgUmVwbGFj
ZTogewogICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNlIFJlcGxh
Y2U6IHsKICAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwpAQCAt
MTU4LDYgKzE2Nyw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQor
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBUcmFuc2l0aW9uOgogICAgICAgICBzd2l0Y2ggKG90
aGVyLm1fa2luZCkgewpAQCAtMjEwLDE0ICsyMjAsMTUgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICAKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAg
IG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgICAg
ICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNl
dCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5cGUoKSwKKyAgICAgICAgICAgICI+Iik7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBUcmFuc2l0aW9uOgogICAgICAg
ICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRT
dHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5D
b250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLCAiPiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4
OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTEgQEAgcHVibGljOgogICAgIFB1dEJ5SWRW
YXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJh
dG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50
IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNl
dHRlcigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKQEAgLTk5LDYgKzk5LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwogICAgIH0KIAorICAgIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciByZXF1aXJlZFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcmVxdWlyZWRUeXBlOworICAgIH0KKwogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNv
bnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtl
c0NhbGxzKCkgY29uc3Q7CkBAIC0xMzAsNiArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1
cmUqIG1fbmV3U3RydWN0dXJlOwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciBtX3JlcXVpcmVkVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCi0jaW5jbHVk
ZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5jbHVkZSAiU3BlY2lh
bFBvaW50ZXIuaCIKICNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIgpAQCAt
OTgsMTIgKzk3LDEwIEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtl
ZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlv
bihPcGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZElu
c3RydWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KLSAgICBVbmxp
bmtlZEluc3RydWN0aW9uKFB1dEJ5SWRGbGFncyBmbGFncykgeyB1LnB1dEJ5SWRGbGFncyA9IGZs
YWdzOyB9CiAgICAgdW5pb24gewogICAgICAgICBPcGNvZGVJRCBvcGNvZGU7CiAgICAgICAgIGlu
dDMyX3Qgb3BlcmFuZDsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIFB1dEJ5SWRG
bGFncyBwdXRCeUlkRmxhZ3M7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNyArMzM2LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0Zp
cmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBh
bnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBp
bmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWlu
Z1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1
cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcu
aXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAv
LyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOwor
ICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQs
IGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZl
CisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNl
LCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAv
LyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVu
IGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRp
b24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBv
ZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0
aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNC
ZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRo
ZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJl
dHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMg
dG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0
aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRo
YXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQg
ZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRo
ZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3
YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0
aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBp
bnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODk5MjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjExNCw3ICsyMTE0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRQdXRCeQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8g
b2Zmc2V0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBuZXcgc3RydWN0dXJlCiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBzdHJ1Y3R1cmUgY2hhaW4KLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoUHV0QnlJZE5vbmUpOyAvLyBpcyBub3QgZGlyZWN0CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHN0YXRpY19jYXN0PGludD4oUHV0QnlJZE5vbmUpKTsgLy8gaXMg
bm90IGRpcmVjdAogCiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMjEzNiw3ICsyMTM2LDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlYwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsgLy8gb2Zmc2V0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAv
LyBuZXcgc3RydWN0dXJlCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBzdHJ1Y3R1
cmUgY2hhaW4gKHVudXNlZCBpZiBkaXJlY3QpCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKChw
dXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJvcGVydHkgIT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJc0RpcmVjdCA6IFB1dEJ5
SWROb25lKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PigocHV0
VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8IHByb3BlcnR5ICE9IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRCeUlkSXNEaXJlY3QgOiBQdXRCeUlk
Tm9uZSkpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDE4OTky
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOSArMTE2LDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQp
CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQpOworICAgICAgICByZXR1cm4g
ZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCwgYWRtaXR0ZWRUeXBlcyk7CiAgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xMzksNyArMTM5LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZmlsdGVyQnlWYWx1ZShmb3JOb2RlKG5vZGUpLCB2YWx1ZSk7CiAgICAgfQog
ICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVl
JiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNw
ZWNOb25lKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQWJzdHJhY3RW
YWx1ZSYsIEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0
VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZh
bHVlKEFic3RyYWN0VmFsdWUmLCBGcm96ZW5WYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjksMTAgKzE4Mjks
MTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZh
bHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0
dXJlLmlzRmluaXRlKCkKICAgICAgICAgICAgICYmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpKSB7Ci0gICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAg
ICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigp
XTsKKyAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcih2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkKTsKICAgICAgICAgICAgIGlmIChz
dGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0
aGUgcmVzdWx0IGlzIGdvaW5nIHRvIGJlIC0gaXMgaXQgVE9QLCBhIGNvbnN0YW50LCBvciBtYXli
ZQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KQEAgLTE4NDEsMjIg
KzE4NDEsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRo
YXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3ZSdkCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNv
bnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29u
c3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB0aGlzUmVz
dWx0LnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6
ZShjb25zdGFudFJlc3VsdCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRo
aXNSZXN1bHQpOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCB1aWQsIHN0YXR1c1tpXS5vZmZzZXQoKSwgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSB8fCBpc0ZUTChtX2dyYXBo
Lm1fcGxhbi5tb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xODgwLDcgKzE4NzAsNiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgog
CiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAg
ICAgIApAQCAtMTg4OCwxMiArMTg3NywyNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0
aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCiAgICAg
ICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkgZG9uJ3QuCiAgICAgICAgIAotICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgIGlm
ICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGFkbWl0
dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVz
ZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRU
eXBlcyA9IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQp
OworICAgICAgICAKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4NSwyOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3JhcGgu
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZz
ZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEuaWRl
bnRpZmllck51bWJlcl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMgdGhh
dCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5nIHRo
ZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90IG9w
dGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAodXN1
YWxseQorICAgICAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkgQ1NF
IGZvciBleGFtcGxlKSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJlCisg
ICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHks
IHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAgICAg
Ly8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4KKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5vZmZz
ZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0aCBp
cyBiZXR0ZXIuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAgICAg
ICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEuaW5mZXJyZWRUeXBlLCBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGcm9t
UGFyc2luZyk7CisKKyAgICAgICAgLy8gSWYgd2UgZGVjaWRlIHRoYXQgdGhlcmUgZG9lcyBub3Qg
ZXhpc3QgYW55IHZhbHVlIHRoYXQgdGhpcyBjYW4gcmV0dXJuLCB0aGVuIGl0J3MgcHJvYmFibHkK
KyAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcGlsYXRpb24gd2FzIGFscmVhZHkgaW52YWxpZGF0
ZWQuCisgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOworCisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAg
ICAgaWYgKHZhbHVlLm1fdmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEyMCw2ICsy
MTM3LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAvLyBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gY29tcGlsZSB0aW1lcywgYnV0IHRoaXMgbm9k
ZSBpcyBGVEwtb25seS4KICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
ICAgICAgICAgCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50
aWZpZXJzKClbbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyXTsK
KwogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVz
dWx0OwpAQCAtMjEyOSwxOCArMjE0OCwyOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zm
c2V0TWV0aG9kOjpDb25zdGFudCkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRv
cCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzd2l0Y2ggKGdl
dENhc2UubWV0aG9kKCkua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpDb25zdGFudDogeworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3Vs
dDsKKyAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwKKyAgICAgICAgICAgICAgICAgICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBYnN0
cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNv
bnN0YW50KCksCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
KSk7Ci0gICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
bWVyZ2UoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIG1fc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVh
cFRvcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VT
dHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKQEAgLTIxNjMsNiAr
MjE5Myw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIEFi
c3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdWYWx1ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBAIC0yMTcwLDYgKzIyMDIs
MTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKKyAgICAgICAgICAgIHRoaXNWYWx1ZS5maWx0
ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRp
bmdWYWx1ZS5tZXJnZSh0aGlzVmFsdWUpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAg
ICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSkgewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0yMTg1
LDYgKzIyMjIsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAg
ICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBo
LCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSA9IHJlc3VsdGluZ1Zh
bHVlOworICAgICAgICBpZiAoISFvcmlnaW5hbFZhbHVlICYmICFyZXN1bHRpbmdWYWx1ZSkKKyAg
ICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yMjY0LDEzICsyMzA0LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1
dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYm
ICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIGlmICh2YWx1ZS5t
X3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1
cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2
YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZp
ZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5v
cCgpID09IFB1dEJ5SWREaXJlY3QpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChz
dGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7
CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKQEAgLTI2MTUs
OSArMjY1NSw5IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAog
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXIoCi0gICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0
ZWRUeXBlcykKIHsKLSAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCkgPT0gRmlsdHJh
dGlvbk9LKQorICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0LCBhZG1pdHRlZFR5cGVz
KSA9PSBGaWx0cmF0aW9uT0spCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgbV9z
dGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw1NiBAQCB2b2lkIEFic3RyYWN0
VmFsdWU6OnNldFR5cGUoR3JhcGgmIGdyYXBoCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQog
Cit2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2lu
ZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAg
ICBzZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjT3RoZXIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBzZXRUeXBlKFNwZWNJ
bnQzMik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgor
ICAgICAgICBzZXRUeXBlKFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBzZXQoZ3JhcGgsIGdyYXBoLm1f
dm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzZXQoZ3JhcGgsIGRlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBzZXQoZ3JhcGgsIGRlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICBtZXJnZShTcGVjT3RoZXIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgc2V0VHlwZShn
cmFwaCwgU3BlY09iamVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc2V0VHlwZShncmFwaCwgU3BlY09iamVjdCB8IFNw
ZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgor
ICAgICAgICBtYWtlSGVhcFRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQo
CisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgc2V0KGdy
YXBoLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVyZXNBcmVD
bG9iYmVyZWQpCisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7Cit9CisKIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiBncmFwaCwgTm9kZUZsYWdz
IHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2RlKQogewogICAgIGlmIChyZXByZXNlbnRhdGlvbiA9
PSBOb2RlUmVzdWx0RG91YmxlKSB7CkBAIC0xODksOCArMjM5LDIyIEBAIGJvb2wgQWJzdHJhY3RW
YWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKICAgICByZXR1cm4gb2xkTWUgIT0gKnRoaXM7CiB9
CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEdyYXBoJiBncmFwaCwg
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK2Jvb2wgQWJzdHJhY3RWYWx1ZTo6aXNUeXBlKEdy
YXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUp
IGNvbnN0CiB7CisgICAgQWJzdHJhY3RWYWx1ZSB0eXBlVmFsdWU7CisgICAgdHlwZVZhbHVlLnNl
dChncmFwaCwgaW5mZXJyZWRUeXBlKTsKKworICAgIEFic3RyYWN0VmFsdWUgbWVyZ2VkVmFsdWUg
PSAqdGhpczsKKyAgICBtZXJnZWRWYWx1ZS5tZXJnZSh0eXBlVmFsdWUpOworCisgICAgcmV0dXJu
IG1lcmdlZFZhbHVlID09IHR5cGVWYWx1ZTsKK30KKworRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFj
dFZhbHVlOjpmaWx0ZXIoCisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQoreworICAgIEFTU0VSVCghKGFkbWl0
dGVkVHlwZXMgJiBTcGVjQ2VsbCkpOworICAgIAogICAgIGlmIChpc0NsZWFyKCkpCiAgICAgICAg
IHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgCkBAIC0xOTgsNyArMjYyLDcgQEAgRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVz
LCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCiAgICAgCi0gICAgbV90eXBlICY9IG90
aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3R5cGUgJj0gb3RoZXIuc3Bl
Y3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIHwgYWRtaXR0ZWRUeXBlczsKICAgICBtX2FycmF5TW9k
ZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9zdHJ1Y3R1cmUu
ZmlsdGVyKG90aGVyKTsKICAgICAKQEAgLTMxNSw2ICszNzksMTMgQEAgRmlsdHJhdGlvblJlc3Vs
dCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoYwogICAgIHJldHVybiBDb250cmFkaWN0aW9uOwogfQog
CitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBYnN0cmFj
dFZhbHVlIGZpbHRlclZhbHVlOworICAgIGZpbHRlclZhbHVlLnNldChncmFwaCwgZGVzY3JpcHRv
cik7CisgICAgcmV0dXJuIGZpbHRlcihmaWx0ZXJWYWx1ZSk7Cit9CisKIHZvaWQgQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQogewogICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIs
IGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVu
ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRG
R05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNp
bmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5
cGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgog
I2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBAIC0yMTQsNyArMjE1LDEwIEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworCiAgICAg
dm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlRmxhZ3MgcmVwcmVzZW50
YXRpb24sIE5vZGUqID0gbnVsbHB0cik7CiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRp
b24oR3JhcGgmLCBOb2RlKik7CiAgICAgCkBAIC0yODAsMTcgKzI4NCwyNyBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5
cGUpOwogICAgIH0KKworICAgIGJvb2wgaXNUeXBlKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAgICAvLyBGaWx0ZXJzIHRoZSB2YWx1ZSB1c2luZyB0
aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gSWYgdGhlIGFkbWl0dGVkVHlwZXMgYXJndW1lbnQgaXMg
bm90IHBhc3NlZCwgdGhpcworICAgIC8vIGltcGxpY2l0bHkgZmlsdGVycyBieSB0aGUgdHlwZXMg
aW1wbGllZCBieSB0aGUgc3RydWN0dXJlIHNldCwgd2hpY2ggYXJlIHVzdWFsbHkgYSBzdWJzZXQg
b2YKKyAgICAvLyBTcGVjQ2VsbC4gSGVuY2UsIGFmdGVyIHRoaXMgY2FsbCwgdGhlIHZhbHVlIHdp
bGwgbm8gbG9uZ2VyIGhhdmUgYW55IG5vbi1jZWxsIG1lbWJlcnMuIEJ1dCwgeW91IGNhbgorICAg
IC8vIHVzZSBhZG1pdHRlZFR5cGVzIHRvIHByZXNlcnZlIHNvbWUgbm9uLWNlbGwgdHlwZXMuIE5v
dGUgdGhhdCBpdCdzIHdyb25nIGZvciBhZG1pdHRlZFR5cGVzIHRvIG92ZXJsYXAKKyAgICAvLyB3
aXRoIFNwZWNDZWxsLgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3Qg
U3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKTsK
ICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVy
ZVNldCYpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVz
KTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSk7CiAg
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoY29uc3QgQWJzdHJhY3RWYWx1ZSYpOworCisgICAg
RmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImKTsKICAgICAKICAgICBGaWx0cmF0aW9uUmVzdWx0IGNoYW5nZVN0cnVjdHVyZShHcmFw
aCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAogICAgIGJvb2wgY29udGFpbnMoU3RydWN0
dXJlKikgY29uc3Q7Ci0gICAgCisKICAgICBib29sIHZhbGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoaXNIZWFwVG9wKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg5OTI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwNiw5ICsyMDYsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxl
VHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9u
KiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5
cGVkQXJyYXlUeXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKLSAgICBO
b2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7Ci0gICAgTm9kZSogaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhh
bmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5
T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBOb2RlKiB2YWx1ZSk7Cisg
ICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKIAogICAgIC8vIENyZWF0
ZSBhIHByZXNlbmNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2VkIG9uIHNvbWUga25vd24g
b2Zmc2V0IGFuZCBzdHJ1Y3R1cmUgc2V0LiBEb2VzIG5vdAogICAgIC8vIGNoZWNrIHRoZSB2YWxp
ZGl0eSBvZiB0aGUgY29uZGl0aW9uLCBidXQgaXQgbWF5IHJldHVybiBhIG51bGwgb25lIGlmIGl0
IGVuY291bnRlcnMgYSBjb250cmFkaWN0aW9uLgpAQCAtMjMwNyw3ICsyMzA2LDkgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlPZmZzZXQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlLCBOb2RlVHlwZSBv
cCkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KG9mZnNldCkpCkBAIC0yMzE4LDEzICsyMzE5LDE3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAg
ICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgZGF0YS0+
aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOworICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJl
ZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRv
R3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3Jh
Z2UsIGJhc2UpOwogCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlLAorICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzUsNiArMjM0
MCw4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9y
YWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsK
ICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXI7CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOworICAg
IG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAKICAgICBO
b2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIHByb3Bl
cnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgIApAQCAtMjQ0OSw3ICsyNDU2LDggQEAgTm9k
ZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3RhbnQoKSkpOwogICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRk
VG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7Ci0gICAgICAg
IHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmll
ck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBvcCk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRC
eU9mZnNldCgKKyAgICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVt
YmVyLCBtZXRob2Qub2Zmc2V0KCksIEluZmVycmVkVHlwZTo6VG9wLCBvcCk7CiAgICAgfQogICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CiAgICAgICAgIC8vIFdpbGwgbmV2ZXIgc2Vl
IHRoaXMgZnJvbSBwbGFuTG9hZCgpLgpAQCAtMjU1NSwxMyArMjU2MywxMyBAQCBOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6bG9hZCgKICAgICAKICAgICBib29sIG5lZWRTdHJ1Y3R1cmVDaGVjayA9IHRy
dWU7CiAgICAgCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAKICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFz
ZSA9IGJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7CiAgICAgICAgIC8v
IFRyeSB0byBvcHRpbWl6ZSBhd2F5IHRoZSBzdHJ1Y3R1cmUgY2hlY2suIE5vdGUgdGhhdCBpdCdz
IG5vdCB3b3J0aCBkb2luZyBhbnl0aGluZyBhYm91dCB0aGlzCiAgICAgICAgIC8vIGlmIHRoZSBi
YXNlJ3Mgc3RydWN0dXJlIGlzIHdhdGNoZWQuCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYmFzZS0+Y29uc3RhbnQoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgIGlmICghc3RydWN0dXJl
LT5kZmdTaG91bGRXYXRjaCgpKSB7Ci0gICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
ID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIGxvYWRpbmcgZnJvbSBhIHBy
b3RvdHlwZS4gV2UgZXhwZWN0IHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZQogICAgICAgICAgICAg
ICAgIC8vIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
aWYgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZQpAQCAtMjYyNiw5ICsyNjM0LDE4IEBAIE5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAg
ICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CiAgICAgICAgIH0K
KworICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlOworICAgICAg
ICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKSB7CisgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSog
c3RydWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkgeworICAgICAgICAgICAgICAgIElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0aGlzVHlwZSA9IG1fZ3JhcGguaW5mZXJyZWRUeXBlRm9y
UHJvcGVydHkoc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZS5t
ZXJnZSh0aGlzVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgICAgIAogICAgICAgICBs
b2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgbG9hZFByZWRpY3Rp
b24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7Cisg
ICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBsb2FkT3ApOwogICAgIH0KIAogICAgIHJldHVybiBs
b2FkZWRWYWx1ZTsKQEAgLTI2MzksNyArMjY1Niw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpz
dG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlh
bnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVu
dGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5
T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQucmVxdWly
ZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJ
ZCgKQEAgLTI3OTgsNiArMjgxNSw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
SWQoCiAgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworCisg
ICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVz
LnZhcmlhbnRzKCkpCisgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKHZh
cmlhbnQucmVxdWlyZWRUeXBlKCkpOwogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNl
dERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAg
ICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwpAQCAtMjg1NCw2
ICsyODc0LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRk
KCk7CiAgICAgICAgIGRhdGEtPm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CiAgICAgICAgIGRh
dGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBkYXRhLT5p
bmZlcnJlZFR5cGUgPSB2YXJpYW50LnJlcXVpcmVkVHlwZSgpOworICAgICAgICBtX2dyYXBoLnJl
Z2lzdGVySW5mZXJyZWRUeXBlKGRhdGEtPmluZmVycmVkVHlwZSk7CiAgICAgICAgIAogICAgICAg
ICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgUHV0QnlPZmZzZXQsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNp
b24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgYm9vbCBjbG9iYmVyc0V4
aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZAogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRp
b246CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDb3Vu
dEV4ZWN1dGlvbjoKKyAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBt
ZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMgb2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8g
c2VwYXJhdGUgdGhlCiAgICAgICAgIC8vIGhlYXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2
YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5v
dy4KICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDg0NDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCisj
aW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25T
ZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIK
QEAgLTM3Myw3ICszNzQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgJiYg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQpAQCAtNDQ4LDYgKzQ1MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWVWYWx1ZSA9
IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CiAKICAgICAgICAgICAgICAgICBtX2lu
dGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5v
ZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAgICAgICAgICAgICAgYWxyZWFk
eUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xk
ZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCkBAIC00NjMsNyArNDY2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGF0dXMubnVtVmFyaWFudHMoKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID4gMSAmJiAhaXNGVEwobV9n
cmFwaC5tX3BsYW4ubW9kZSkpCkBAIC02NDAsNyArNjQzLDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgY2hpbGRFZGdlLCBpZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBlbWl0R2V0
QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBFZGdlIGNoaWxkRWRn
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAg
IHZvaWQgZW1pdEdldEJ5T2Zmc2V0KAorICAgICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5v
ZGUqIG5vZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAorICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3ApCiAgICAgewogICAgICAgICBjaGls
ZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAKQEAgLTY1Niw2ICs2NjEs
NyBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBo
Lm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0
OwogICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAg
ICAgICBkYXRhLmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAgICAgICAgCiAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CiAgICAg
fQpAQCAtNjY0LDggKzY3MCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+
Y2hpbGQxKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ss
IG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGluc2Vy
dEluZmVycmVkVHlwZUNoZWNrKAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5C
bG9jaywgb3JpZ2luLCBub2RlLT5jaGlsZDIoKS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBl
KCkpOwogCiAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsK
ICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKQEAgLTczMCw2ICs3
MzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gQXJpc2VzIHdoZW4gd2UgcHJ1bmUgTXVs
dGlHZXRCeU9mZnNldC4gV2UgY291bGQgaGF2ZSBhCiAgICAgICAgICAgICAvLyBNdWx0aUdldEJ5
T2Zmc2V0IHdpdGggYSBzaW5nbGUgdmFyaWFudCB0aGF0IGNoZWNrcyBmb3Igc3RydWN0dXJlIFMs
CiAgICAgICAgICAgICAvLyBhbmQgdGhlIGlucHV0IGhhcyBzdHJ1Y3R1cmVzIFMgYW5kIFQsIGZv
ciBleGFtcGxlLgorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSksIG5vZGUtPmNoaWxkMSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgREZHRGVzaXJlZEluZmVycmVkVHlwZV9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERGRydzIGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJl
ZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3ZSB3YW50IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJ
bmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0IHRoaXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0
IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFzcyBEZXNpcmVkSW5mZXJyZWRUeXBlIHsKK3B1Ymxp
YzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRy
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVzaXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5
cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAg
ICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkK
KyAgICB7CisgICAgfQorCisgICAgRGVzaXJlZEluZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBt
X2V4cGVjdGVkKEluZmVycmVkVHlwZTo6VG9wKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QgJiYgbV9leHBlY3RlZDsg
fQorCisgICAgSW5mZXJyZWRUeXBlKiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsg
fQorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBleHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwZWN0ZWQ7IH0KKworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuV2F0Y2gobV9leHBlY3RlZCk7CisgICAgfQorCisg
ICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkgY29uc3QKKyAgICB7CisgICAgICAg
IG1fb2JqZWN0LT5hZGRXYXRjaHBvaW50KHdhdGNocG9pbnQpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBvdGhlci5tX29iamVjdAorICAgICAgICAgICAg
JiYgbV9leHBlY3RlZCA9PSBvdGhlci5tX2V4cGVjdGVkOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmpl
Y3QgJiYgbV9leHBlY3RlZCA9PSBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5m
ZXJyZWRUeXBlKj46Omhhc2gobV9vYmplY3QpICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAg
IH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9l
eHBlY3RlZCwgY29udGV4dCksICIgZm9yICIsIFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5m
ZXJyZWRUeXBlKiBtX29iamVjdDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBl
Y3RlZDsKK307CisKK3N0cnVjdCBEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYgYSwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0
eXBlZGVmIEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVz
aXJlZEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsMTEgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRBZGFwdG9yOgogICAgIH0KIH0KIAordm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9u
RGF0YSYgY29tbW9uKQoreworICAgIGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2Rl
QmxvY2spKTsKK30KKwogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7
IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05
Myw2ICs5OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAg
ICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVz
aXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5
KQoreworICAgIG1faW5mZXJyZWRUeXBlcy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlm
ICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQg
RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRj
aHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNl
dHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxW
YWxpZCgpCiAgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAg
ICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYg
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5m
ZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRz
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdApAQCAtMTI3LDYgKzEzOSw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5D
b250ZXh0KFAKICAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4
dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAg
QnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIp
OwogICAgIG91dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNv
bnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQu
cHJpbnQoIiAgICBJbmZlcnJlZCB0eXBlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywg
Y29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJ
KHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAi
REZHRGVzaXJlZEluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmgiCkBAIC05MSw2ICs5MiwxOCBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50QWRhcHRvCiAgICAgfQogfTsKIAorc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3Igewor
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5p
c1N0aWxsVmFsaWQoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0
KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRl
eHQpKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwg
dHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4K
IGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQK
QEAgLTE1OSw2ICsxNzIsMTAgQEAgcHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhh
dCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9u
KCksIHdoaWNoIGRvZXMKICAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBz
b21lIG90aGVyIGJvb2trZWVwaW5nLgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJik7CisKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRv
bid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hp
Y2ggZG9lcworICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemls
eShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihT
dHJ1Y3R1cmUqKTsKICAgICAKQEAgLTE4Niw2ICsyMDMsMTAgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAg
IH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAg
IH0KIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3
LDcgQEAgcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFs
dWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmlj
RGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0
Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxEZXNpcmVkSW5mZXJyZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVy
cmVkVHlwZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTkyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgog
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5j
bHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKQEAgLTEwOTIsNiArMTA5Myw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdl
UmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldCwgbV9pbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hp
bGQzKCkubm9kZSgpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCku
aW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hp
bGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDEyICsy
NjEsMTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YSgpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NE
YXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0
YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CisgICAgICAgIG91
dC5wcmludCgiLCBpbmZlcnJlZFR5cGUgPSAiLCBpbkNvbnRleHQoc3RvcmFnZUFjY2Vzc0RhdGEu
aW5mZXJyZWRUeXBlLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNNdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0g
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
aWQiLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50
aWZpZXJOdW1iZXJdLCAifSIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0
YS5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGEuY2FzZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5D
b250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRleHQpKTsKKyAgICAgICAgICAgIGlmIChkYXRhLmNh
c2VzW2ldLm1ldGhvZCgpLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIiAoaW5mZXJyZWQgdmFsdWUgPSAiLCBpbkNvbnRleHQoaW5m
ZXJyZWRWYWx1ZUZvclByb3BlcnR5KGRhdGEuY2FzZXNbaV0uc2V0KCksIGlkZW50aWZpZXJzKClb
ZGF0YS5pZGVudGlmaWVyTnVtYmVyXSksIGNvbnRleHQpLCAiKSIpOworICAgICAgICB9CiAgICAg
fQogICAgIGlmIChub2RlLT5oYXNNdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11
bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsK
QEAgLTg4Nyw2ICs4OTEsMzggQEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBi
YXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmFz
ZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJy
ZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFzc2VydElzUmVn
aXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5mZXJy
ZWRUeXBlcy5maW5kKGtleSk7CisgICAgaWYgKGl0ZXIgIT0gbV9pbmZlcnJlZFR5cGVzLmVuZCgp
KQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGVP
YmplY3QgPSBrZXkuc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihrZXkudWlkKCkpOworICAg
IGlmICghdHlwZU9iamVjdCkgeworICAgICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5m
ZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAg
fQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHR5cGVEZXNjcmlwdG9yID0gdHlwZU9i
amVjdC0+ZGVzY3JpcHRvcigpOworICAgIGlmICh0eXBlRGVzY3JpcHRvci5raW5kKCkgPT0gSW5m
ZXJyZWRUeXBlOjpUb3ApIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVy
cmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0K
KyAgICAKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgdHlwZURlc2NyaXB0b3IpOworCisg
ICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0eXBlT2JqZWN0KTsKKyAgICByZWdp
c3RlckluZmVycmVkVHlwZSh0eXBlRGVzY3JpcHRvcik7CisKKyAgICAvLyBOb3RlIHRoYXQgd2Ug
bWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhpcyBkZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1
c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkKKyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZl
cnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShEZXNp
cmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3QsIHR5cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1
cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2
ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sq
LCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9
IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0xMDYxLDcgKzEwOTcsNyBA
QCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTCiBKU1ZhbHVlIEdyYXBo
Ojp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0g
ICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7Cisg
ICAgaWYgKHN0cnVjdHVyZS5pc0luZmluaXRlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IElmIHdl
IGp1c3QgY29udmVydGVkIHRoZSBvZmZzZXQgdG8gYSB1aWQsIHdlIGNvdWxkIGRvIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uCiAgICAgICAgIC8vIHdhdGNoaW5nIHRvIGNvbnN0YW50LWZvbGQgdGhl
IHByb3BlcnR5LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ3MjcxCkBAIC0xMDc2LDYgKzExMTIsMzcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShjbwogICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJh
c2UubV92YWx1ZSwgYmFzZS5tX3N0cnVjdHVyZSwgb2Zmc2V0KTsKIH0KIAorQWJzdHJhY3RWYWx1
ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNs
b2JiZXJTdGF0ZSkKK3sKKyAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICBiYXNlLmZvckVh
Y2goCisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXQoKnRoaXMsIGluZmVycmVk
VHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgICAgICAgICByZXN1bHQubWVy
Z2UodmFsdWUpOworICAgICAgICB9KTsKKyAgICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVy
ZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIHJlc3VsdC5jbG9iYmVyU3RydWN0dXJlcygpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eSgKKyAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgU3RydWN0dXJlQ2xvYmJlclN0
YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0
YW50UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0
ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1
Y3R1cmUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0
eShiYXNlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1
cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRD
b25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQg
Zm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVk
ZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgorI2luY2x1ZGUgIkRGR1Byb3BlcnR5VHlwZUtleS5o
IgogI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVu
ZXNzLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgpAQCAtNjc1LDYgKzY3NiwyNyBAQCBwdWJsaWM6
CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVu
IG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21w
dXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25k
aXRpb24oKS4KICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlP
ZmZzZXQpOworCisgICAgdm9pZCByZWdpc3RlckluZmVycmVkVHlwZShjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlwZS5zdHJ1Y3R1cmUo
KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHR5cGUuc3RydWN0dXJlKCkpOworICAg
IH0KKworICAgIC8vIFRlbGxzIHVzIHdoYXQgaW5mZXJyZWQgdHlwZSB3ZSBhcmUgYWJsZSB0byBw
cm92ZSB0aGUgcHJvcGVydHkgdG8gaGF2ZSBub3cgYW5kIGluIHRoZSBmdXR1cmUuCisgICAgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVL
ZXkmKTsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yUHJvcGVy
dHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgewor
ICAgICAgICByZXR1cm4gaW5mZXJyZWRUeXBlRm9yKFByb3BlcnR5VHlwZUtleShzdHJ1Y3R1cmUs
IHVpZCkpOworICAgIH0KKworICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkKTsKKwor
ICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29uc3RhbnQgcHJvcGVydHkgaW5mZXJlbmNlIG9yIHBy
b3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRlcml2ZSBhIGdvb2QgYWJzdHJhY3QKKyAgICAvLyB2
YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nlc3NlZCB3aXRoIHRoZSBnaXZlbiBhYnN0cmFjdCB2
YWx1ZSBiYXNlLgorICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAor
ICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICAKICAgICBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwpAQCAtODU2LDYgKzg3
OCw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxG
dWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENv
ZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxz
OwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3Nh
ZmVUb0xvYWQ7CisgICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwog
ICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29w
cyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5m
ZXJyZWRUeXBlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVD
aGVjaygKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4
LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSogYmFzZU5vZGUsCisgICAgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJiB0eXBlKQoreworICAgIGluc2VydGlvblNldC5ncmFwaCgpLnJlZ2lz
dGVySW5mZXJyZWRUeXBlKHR5cGUpOworICAgIAorICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG9yaWdpbik7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2lu
LCBFZGdlKGJhc2VOb2RlLCBCb29sZWFuVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT3RoZXJV
c2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgor
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVj
aywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBJbnQzMlVzZSkpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2Rl
LCBOdW1iZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OlN0cmluZzoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgU3RyaW5nVXNlKSk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5z
ZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAg
ICAgICAgICAgIEVkZ2UoYmFzZU5vZGUsIENlbGxVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9u
U2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAg
ICAgIEVkZ2UoYmFzZU5vZGUsIENlbGxPck90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUs
IE9iamVjdFVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4
LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT2JqZWN0T3JPdGhlclVz
ZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgREZHX0NSQVNIKGluc2VydGlvblNldC5ncmFwaCgp
LCBiYXNlTm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKyNkZWZp
bmUgREZHSW5mZXJyZWRUeXBlQ2hlY2tfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBJbnNlcnRzIGEgdHlwZSBjaGVjayB0
aGF0IGVuc3VyZXMgdGhhdCBiYXNlTm9kZSBoYXMgdGhlIGdpdmVuIGluZmVycmVkIHR5cGUuCit2
b2lkIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVk
IG5vZGVJbmRleCwgTm9kZU9yaWdpbiwgTm9kZSogYmFzZU5vZGUsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCwxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jazsKIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0
YSB7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXI7CisKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGtub3cgdGhlIGluZmVycmVkIHR5cGUuIEZv
ciBwdXRzLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gcmVtZW1iZXIKKyAg
ICAvLyB3aGF0IGNoZWNrIGlzIG5lZWRlZC4gRm9yIGdldHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2Ugb3RoZXJ3aXNlIEFJIG1pZ2h0IGZvcmdldCB3aGF0IHR5cGUgaXMKKyAgICAvLyBndWFy
YW50ZWVkLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CiB9Owog
CiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTM1
LDE0ICsyMTM1LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBjdXJyZW50T2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBCZWNhdXNlIG91ciBhbmFseXNpcyB0cmVhdHMgTXVsdGlQdXRCeU9mZnNl
dCBsaWtlIGFuIGVzY2FwZSwgd2Ugb25seSBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkZWFsIHdpdGggc3RvcmluZyByZXN1bHRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXZp
b3VzbHkgc3RvcmVkIGJ5IFB1dEJ5T2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBu
b2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNo
ZWNrcy4gVGhpcyBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlz
IHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0
aGUgcmlnaHQgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0
cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJp
YW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZz
ZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVh
cigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
ZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRh
dGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBj
dXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAor
ICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBj
dXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR1Byb3BlcnR5VHlwZUtleV9oCisjZGVmaW5lIERGR1Byb3BlcnR5
VHlwZUtleV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworLy8gVGhpcyBvYmplY3QgaXMgYSBrZXkgZm9yIGZpbmRpbmcgYSBwcm9wZXJ0eSdz
IHR5cGUuIEl0J3MgYSB0dXBsZSBvZiBTdHJ1Y3R1cmUqIGFuZCBVbmlxdWVkU3RyaW5nSW1wbCou
CisKK2NsYXNzIFByb3BlcnR5VHlwZUtleSB7CitwdWJsaWM6CisgICAgUHJvcGVydHlUeXBlS2V5
KCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1fdWlkKG51bGxw
dHIpCisgICAgeworICAgIH0KKworICAgIFByb3BlcnR5VHlwZUtleShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1
Y3R1cmUpCisgICAgICAgICwgbV91aWQodWlkKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0
eVR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fc3Ry
dWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV91aWQoZGVsZXRlZFVJRCgpKQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUgJiYgbV91aWQ7IH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3Qg
eyByZXR1cm4gbV91aWQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5
cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09
IG90aGVyLm1fc3RydWN0dXJlCisgICAgICAgICAgICAmJiBtX3VpZCA9PSBvdGhlci5tX3VpZDsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpICsgV1RGOjpQdHJIYXNoPFVu
aXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0cnVj
dHVyZSAmJiBtX3VpZCA9PSBkZWxldGVkVUlEKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAg
IHsKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0dXJlLCBj
b250ZXh0KSwgIisiLCBtX3VpZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBVbmlxdWVkU3RyaW5nSW1wbCogZGVsZXRl
ZFVJRCgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJ
bXBsKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0
dXJlKiBtX3N0cnVjdHVyZTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7Cit9OworCitz
dHJ1Y3QgUHJvcGVydHlUeXBlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGEsIGNvbnN0IFByb3BlcnR5VHlw
ZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlBy
b3BlcnR5VHlwZUtleT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleUhh
c2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiA6
IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R1Byb3BlcnR5VHlwZUtleV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgY2FzZSBC
b29sZWFuVXNlOgogICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgIGNhc2UgQ2VsbE9yT3Ro
ZXJVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNl
OgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgpAQCAtMTI3LDYgKzEyOCw5IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBpZiAoIXNhZmVUb0V4ZWN1
dGVFZGdlLnJlc3VsdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBOT1RFOiBU
aGlzIHRlbmRzIHRvIGxpZSB3aGVuIGl0IGNvbWVzIHRvIGVmZmVjdGZ1bCBub2RlcywgYmVjYXVz
ZSBpdCBrbm93cyB0aGF0IHRoZXkgYXJlbid0IGdvaW5nIHRvCisgICAgLy8gZ2V0IGhvaXN0ZWQg
YW55d2F5LgorCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50
OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4OTky
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OTgsMzYgKzM4OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNl
dCgpLnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCku
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAw
LAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlLmdwcigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3Ry
dWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKQotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCks
IG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFdlYWtQdHIoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3Ry
dWN0dXJlLmdwcigpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4
OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MTEsMzggKzM5MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNl
dCgpLnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgZXhpdEtp
bmQgPSBCYWRDb25zdGFudENhY2hlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0S2lu
ZCA9IEJhZENhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgp
LnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgIGV4aXRLaW5kLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwg
MCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAotICAgICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZShKSVRDb21waWxlcjo6RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG5v
ZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdl
YWtTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjMyLDYgKzUyMzIsODEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVR5cGVPZihOb2RlKgogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUsIEdQUlJl
ZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJl
U2V0KCkuc2l6ZSgpKTsKKyAgICAKKyAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgp
ID09IDEpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0
dXJlU2V0KClbMF0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BS
VGVtcG9yYXJ5PiBzdHJ1Y3R1cmU7CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFI7CisgICAg
ICAgIAorICAgICAgICBpZiAodGVtcEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEdQUlRlbXBvcmFyeT4odGhpcyk7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUtPmdwcigpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHRlbXBHUFI7CisgICAgICAgIAorICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAg
IGRvbmUuYXBwZW5kKAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUo
SklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ld
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAs
CisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQo
KS5sYXN0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0K
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5v
ZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNl
IENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNlbGxVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNvbXBpbGVDaGVj
a1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENlbGxPck90
aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVl
UmVncygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZVJlZ3MpOwor
ICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVlUmVncywgbm9kZS0+Y2hp
bGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZO
b3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAg
IGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1w
R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NS
QVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJl
dmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2MzYsNiArNTcxMSwyMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2UgCiAgICAgKFNwZWN1bGF0
ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBl
Q2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gbV9qaXQu
YnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsCisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFuZC5qc1ZhbHVlUmVncygp
LCB0ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hl
Y2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYwMDcsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBz
cGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxPck90aGVy
VXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMTUsNiArMjIxNSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiwgR1BSUmVnIGNlbGxH
UFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2Rl
Kik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFs
c2VUbyhHUFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3Bl
Y3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRn
ZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQ2Vs
bE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSk7CiAgICAgdm9p
ZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0
KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUg
YnV0IHRoZW4gcnVuIHRoZWlyIG93biBiYXJyaWVyLgotICAgICAgICAgICAgICAgIGluc2VydEJh
cnJpZXJXaXRoSW52YWxpZEV4aXQobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVy
KG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxs
VXNlKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTQ4MSwxMSArNDgxLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFzZSk7CiAgICAg
fQogCi0gICAgdm9pZCBpbnNlcnRCYXJyaWVyV2l0aEludmFsaWRFeGl0KHVuc2lnbmVkIG5vZGVJ
bmRleCwgRWRnZSBiYXNlKQotICAgIHsKLSAgICAgICAgaW5zZXJ0QmFycmllcihub2RlSW5kZXgs
IGJhc2UsIGZhbHNlKTsKLSAgICB9Ci0KICAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQg
bm9kZUluZGV4LCBFZGdlIGJhc2UsIGJvb2wgZXhpdE9LID0gdHJ1ZSkKICAgICB7CiAgICAgICAg
IC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2RlLCB3ZSBzaG91bGQgb25seSBpbnNlcnQgdGhlIGJh
cnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJnZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gYXQoaSk7IH0KLSAgICAKKwogICAgIC8vIEluIG1vc3QgY2FzZXMsIHdoYXQgeW91IHJlYWxs
eSB3YW50IHRvIGRvIGlzIHZlcmlmeSB3aGV0aGVyIHRoZSBzZXQgaXMgdG9wIG9yIGNsb2JiZXJl
ZCwgYW5kCiAgICAgLy8gaWYgbm90LCBlbnVtZXJhdGUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzLiBV
c2UgdGhpcyBvbmx5IGluIGNhc2VzIHdoZXJlIHRoZSBzaW5nbGV0b24gY2FzZSBpcwogICAgIC8v
IG1lYW5pbmdmdWxseSBzcGVjaWFsLCBsaWtlIGZvciB0cmFuc2l0aW9ucy4KQEAgLTIwMiw2ICsy
MDIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBtX3NldC5vbmx5U3RydWN0dXJlKCk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIG1fc2V0LmZvckVh
Y2goZnVuY3Rvcik7CisgICAgfQogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJl
dmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDkgQEAgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICBvdXQu
cHJpbnQoIktub3duQ2VsbCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBDZWxsT3JPdGhl
clVzZToKKyAgICAgICAgb3V0LnByaW50KCJDZWxsT3JPdGhlciIpOworICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShy
ZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtu
b3duQm9vbGVhblVzZSwKICAgICBDZWxsVXNlLAogICAgIEtub3duQ2VsbFVzZSwKKyAgICBDZWxs
T3JPdGhlclVzZSwKICAgICBPYmplY3RVc2UsCiAgICAgRnVuY3Rpb25Vc2UsCiAgICAgRmluYWxP
YmplY3RVc2UsCkBAIC0xMDgsNiArMTA5LDggQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVG
aWx0ZXJGb3IoVXNlSwogICAgIGNhc2UgQ2VsbFVzZToKICAgICBjYXNlIEtub3duQ2VsbFVzZToK
ICAgICAgICAgcmV0dXJuIFNwZWNDZWxsOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjQ2VsbCB8IFNwZWNPdGhlcjsKICAgICBjYXNlIE9iamVjdFVzZToKICAg
ICAgICAgcmV0dXJuIFNwZWNPYmplY3Q7CiAgICAgY2FzZSBGdW5jdGlvblVzZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxODk5Mjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYzLDYgKzI2Myw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCw3IEBAIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIEtub3duQm9vbGVh
blVzZToKICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBLbm93bkNlbGxVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0
aW9uVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNiwyMSArMjAyNiw1NyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKICAgICB7Ci0gICAgICAgIExW
YWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCiAgICAgICAg
IEV4aXRLaW5kIGV4aXRLaW5kOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIAotICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAg
ICAgICAgIHN0cnVjdHVyZUlELCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUt
PnN0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVz
ZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAg
ICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1Zh
bHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0
dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tT
dHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1
Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENh
c2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAorICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBq
c1ZhbHVlVmFsdWUodmFsdWUpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0
cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoKQpAQCAtNDAy
Miw2ICs0MDU4LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nr
c1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07CisKKyAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9kZS0+
Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKQEAgLTU2NzQsNiArNTcxMiwxMzUgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CiAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOwogICAgIH0K
KworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAgICAgIC8vIFRo
aXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0IGlz
IGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAgICAgICAvLworICAgICAg
ICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8vCisgICAgICAgIC8vIG1h
eSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgc3dpdGNoIChvYmpl
Y3QtPnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoKKyAgICAgICAgLy8gICAg
ICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAgICAgLy8gICAgICAgICAu
Li4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgIGNhc2UgNDM6Cisg
ICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7CisgICAgICAg
IC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vICAg
ICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUgZGlm
ZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291bGQg
YmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0eXBl
MSB8IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5ib29sZWFuVHJ1
ZSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJv
b2xlYW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
aXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90TnVt
YmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVlLCBwcm92ZW5U
eXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJv
dmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1f
c3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVl
LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3
ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUg
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNl
bGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAg
ICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
U3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwg
ZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5z
dHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwg
Y29udGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAg
IEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAg
ICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKKwor
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE9iamVj
dCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5
cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBu
b3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmpl
Y3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSAmIFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVy
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJl
ZCB0eXBlIik7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0
b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
ICAgICB7CkBAIC03NTE0LDYgKzc2ODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENlbGxV
c2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
T3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtub3duQ2Vs
bFVzZToKICAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhl
ZGdlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc1OTQsNiArNzc2NCwyMiBAQCBwcml2YXRl
OgogICAgICAgICBsb3dDZWxsKGVkZ2UpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNwZWN1bGF0
ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICBMQmFz
aWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxs
T3JPdGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgY29udGludWF0aW9u
IikpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2VsbCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RDZWxsLCBjb250aW51
YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
LCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUlu
dChFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBl
Q2hlY2soZWRnZSkpCkBAIC04MTI3LDYgKzgzMTMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVh
bkZhbHNlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0
LnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
YXBwZW5kKE9TUkV4aXQoCkBAIC04MTM1LDkgKzgzMjQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAg
ICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGls
YXRpb25JbmZvKCkpOwotICAgICAgICAKKwogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlv
biA9PSBtX291dC5ib29sZWFuVHJ1ZSkgeworICAgICAgICAgICAgZW1pdE9TUkV4aXRDYWxsKGV4
aXQsIGxvd1ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDc4IEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3Nl
bWIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorQXNzZW1ibHlIZWxw
ZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgKKyAgICBKU1Zh
bHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUpCit7CisgICAgQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgp
KSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29s
ZWFuOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1w
R1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ3MsIG1vZGUpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIsIG1vZGUpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQu
YXBwZW5kKAorICAgICAgICAgICAgYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIE5v
dEVxdWFsLAorICAgICAgICAgICAgICAgIEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhl
cihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgYnJhbmNo
U3RydWN0dXJlKAorICAgICAgICAgICAgICAgIE5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEFk
ZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBvay5saW5r
KHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0OgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2Rl
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
T3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BS
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4oRlBSUmVn
IGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hEb3VibGUo
RG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTU1LDM3ICs1
NTUsNDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hJZk5vdENl
bGwoR1BSUmVnIHJlZykKKyAgICBlbnVtIFRhZ1JlZ2lzdGVyc01vZGUgeworICAgICAgICBEb05v
dEhhdmVUYWdSZWdpc3RlcnMsCisgICAgICAgIEhhdmVUYWdSZWdpc3RlcnMKKyAgICB9OworCisg
ICAgSnVtcCBicmFuY2hJZk5vdENlbGwoR1BSUmVnIHJlZywgVGFnUmVnaXN0ZXJzTW9kZSBtb2Rl
ID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
cmV0dXJuIGJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVnLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJz
KQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWcsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnLCBUcnVzdGVkSW1tNjQoVGFnTWFzaykpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFN
KG1vZGUpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAjZW5kaWYKICAgICB9Ci0g
ICAgSnVtcCBicmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICBKdW1wIGJyYW5j
aElmTm90Q2VsbChKU1ZhbHVlUmVncyByZWdzLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZl
VGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4g
YnJhbmNoSWZOb3RDZWxsKHJlZ3MuZ3ByKCkpOworICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RD
ZWxsKHJlZ3MuZ3ByKCksIG1vZGUpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90
Q2VsbChyZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChyZWdz
LnRhZ0dQUigpLCBtb2RlKTsKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaElm
Q2VsbChHUFJSZWcgcmVnKQorICAgIEp1bXAgYnJhbmNoSWZDZWxsKEdQUlJlZyByZWcsIFRhZ1Jl
Z2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2
ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVn
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0
KFplcm8sIHJlZywgVHJ1c3RlZEltbTY0KFRhZ01hc2spKTsKICNlbHNlCisgICAgICAgIFVOVVNF
RF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgcmVnLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogI2VuZGlmCiAgICAg
fQotICAgIEp1bXAgYnJhbmNoSWZDZWxsKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgSnVtcCBicmFu
Y2hJZkNlbGwoSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRh
Z1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJy
YW5jaElmQ2VsbChyZWdzLmdwcigpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaElmQ2VsbChyZWdz
LmdwcigpLCBtb2RlKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBicmFuY2hJZkNlbGwocmVncy50
YWdHUFIoKSk7CisgICAgICAgIHJldHVybiBicmFuY2hJZkNlbGwocmVncy50YWdHUFIoKSwgbW9k
ZSk7CiAjZW5kaWYKICAgICB9CiAgICAgCkBAIC02MTMsNDMgKzYyNCw1NSBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB9CiAgICAgCi0gICAgSnVtcCBicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHJl
Z3MpCisgICAgSnVtcCBicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVy
c01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ3MuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdS
ZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdz
LmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4g
YnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlcikpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICByZXR1
cm4gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIEp1bXAgYnJhbmNoSWZOb3RJbnQz
MihKU1ZhbHVlUmVncyByZWdzKQorICAgIEp1bXAgYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVn
cyByZWdzLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3csIHJlZ3Mu
Z3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2Rl
ID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3cs
IHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiBicmFuY2g2NChCZWxvdywgcmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpKTsKICNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKTsKICNlbmRpZgogICAgIH0KIAogICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQ
UiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9kZS4KLSAgICBKdW1wIGJyYW5jaElmTnVtYmVyKEpT
VmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAgIEp1bXAgYnJhbmNoSWZOdW1iZXIo
SlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9
IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIFVO
VVNFRF9QQVJBTSh0ZW1wR1BSKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBp
ZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW02NChUYWdUeXBlTnVtYmVyKSk7CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9k
ZSk7CiAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSwgdGVtcEdQ
Uik7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihCZWxvdywgdGVtcEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsKICNlbmRpZgogICAgIH0KICAgICAKICAgICAvLyBO
b3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4gNjQtYml0IG1vZGUuCi0gICAgSnVt
cCBicmFuY2hJZk5vdE51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAg
ICBKdW1wIGJyYW5jaElmTm90TnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BS
LCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICBVTlVTRURfUEFSQU0odGVtcEdQUik7Ci0gICAgICAgIHJl
dHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCBy
ZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAg
VU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3Mu
dGFnR1BSKCksIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwogI2VuZGlm
CkBAIC03MTksNiArNzQyLDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgSnVtcExp
c3QgYnJhbmNoSWZOb3RUeXBlKAorICAgICAgICBKU1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIFRhZ1JlZ2lzdGVyc01vZGUpOworCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRT
dG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVu
c2V0CiAgICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJl
c3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKLSAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAg
ICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewog
CiAgICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMyw2ICs2MzMsOCBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgIHBjWzVdLnUucG9pbnRl
ciA9IG51bGxwdHI7IC8vIG9mZnNldAogICAgICAgICBwY1s2XS51LnBvaW50ZXIgPSBudWxscHRy
OyAvLyBuZXcgc3RydWN0dXJlCiAgICAgICAgIHBjWzddLnUucG9pbnRlciA9IG51bGxwdHI7IC8v
IHN0cnVjdHVyZSBjaGFpbgorICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KHBjWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0
QnlJZFBlcnNpc3RlbnRGbGFnc01hc2spOwogICAgICAgICAKICAgICAgICAgSlNDZWxsKiBiYXNl
Q2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CkBAIC02NjAsMTIgKzY2MiwxOCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGNbN10udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5
SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcihpZGVudC5pbXBsKCkpLnB1
dEJ5SWRGbGFncygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNo
ZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgIHBjWzRdLnUuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgICAgICAg
ICAgICAgcGNbNV0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAg
ICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisg
ICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSku
cHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzkwLDE3ICsxMzkwLDkxIEBAIF9sbGludF9vcF9wdXRfYnlfaWQ6CiAgICAgIyBBdCB0aGlzIHBv
aW50LCB3ZSBoYXZlOgogICAgICMgdDIgLT4gY3VycmVudFN0cnVjdHVyZUlECiAgICAgIyB0MCAt
PiBvYmplY3QgYmFzZQorICAgICMgV2Ugd2lsbCBsb3NlIGN1cnJlbnRTdHJ1Y3R1cmVJRCBpbiB0
aGUgc2hlbmFuaWdhbnMgYmVsb3cuCiAKKyAgICBsb2FkaSAxMltQQ10sIHQxCisgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZSh0MSwgdDIsIHQzKQorICAgIGxvYWRpIDMyW1BDXSwgdDEKKworICAg
ICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVjdCBiYXNlCisgICAg
IyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IHZhbHVlIHRhZworICAgICMgdDMg
LT4gdmFsdWUgcGF5bG9hZAorCisgICAgYnRpbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ss
IC5vcFB1dEJ5SWRUeXBlY2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcgorCisgICAgIyBX
ZSBoYXZlIG9uZSBvZiB0aGUgbm9uLXN0cnVjdHVyZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hp
Y2ggb25lLgorICAgIGFuZGkgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrLCB0MQorICAgIGJpbHQg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1Ro
YW5TdHJpbmcKKworICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIE9i
amVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCisgICAgYmlsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVy
CisKKyAgICAjIFdlIGFyZSBlaXRoZXIgT2JqZWN0T3JPdGhlciBvciBUb3AuCisgICAgYmllcSB0
MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
CisgICAgIyBDaGVjayBpZiB3ZSBhcmUgT2JqZWN0T3JPdGhlci4KKyAgICBiaWVxIHQyLCBDZWxs
VGFnLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Cisub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6
CisgICAgYmllcSB0MiwgTnVsbFRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAg
YmllcSB0MiwgVW5kZWZpbmVkVGFnLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBq
bXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JP
dGhlcjoKKyAgICAjIFdlIGFyZSBlaXRoZXIgU3RyaW5nIG9yIE9iamVjdC4KKyAgICBiaW5lcSB0
MiwgQ2VsbFRhZywgLm9wUHV0QnlJZFNsb3cKKyAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdCwgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorICAgIGJiZXEgSlNDZWxsOjpt
X3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBq
bXAgLm9wUHV0QnlJZFNsb3cKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3Q6CisgICAgYmJhZXEg
SlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFu
U3RyaW5nOgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xl
YW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyLgorICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbkludDMyCisKKyAgICAjIFdlIGFy
ZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgorICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyCisKKyAgICBiaWVxIHQyLCBJbnQz
MlRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93
CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXI6CisgICAgYmliIHQyLCBMb3dlc3RUYWcgKyAx
LCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKwor
Lm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25lIG9mIHRo
ZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIKKyAgICBiaW5lcSB0MSwgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVCb29sZWFuLCAub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgor
ICAgIGJpZXEgdDIsIEJvb2xlYW5UYWcsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAg
IGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoK
KyAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlCisgICAgYnRpbnogdDEsIFB1dEJ5SWRQcmlt
YXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3Ro
ZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgYW5kaSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCisgICAg
YmluZXEgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIC5vcFB1dEJ5SWRTbG93CisKKy5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlczoKICAgICBsb2FkaSAyNFtQQ10sIHQxCiAKICAgICBi
dGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlvbgogCi0gICAgIyBUaGlzIGlzIHRoZSB0cmFu
c2l0aW9uIGNhc2UuIHQxIGhvbGRzIHRoZSBuZXcgU3RydWN0dXJlKi4gdDIgaG9sZHMgdGhlIG9s
ZCBTdHJ1Y3R1cmUqLgotICAgICMgSWYgd2UgaGF2ZSBhIGNoYWluLCB3ZSBuZWVkIHRvIGNoZWNr
IGl0LiB0MCBpcyB0aGUgYmFzZS4gV2UgbWF5IGNsb2JiZXIgdDEgdG8gdXNlIGl0IGFzCi0gICAg
IyBzY3JhdGNoLgorICAgICMgVGhpcyBpcyB0aGUgdHJhbnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0
aGUgbmV3IFN0cnVjdHVyZSouIElmIHdlIGhhdmUgYSBjaGFpbiwgd2UgbmVlZCB0bworICAgICMg
Y2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBtYXkgY2xvYmJlciB0MSB0byB1c2UgaXQgYXMg
c2NyYXRjaC4KICAgICBsb2FkcCAyOFtQQ10sIHQzCiAgICAgYnRweiB0MywgLm9wUHV0QnlJZFRy
YW5zaXRpb25EaXJlY3QKIAorICAgIGxvYWRpIDE2W1BDXSwgdDIgIyBOZWVkIG9sZCBzdHJ1Y3R1
cmUgYWdhaW4uCiAgICAgbG9hZHAgU3RydWN0dXJlQ2hhaW46Om1fdmVjdG9yW3QzXSwgdDMKICAg
ICBhc3NlcnQobWFjcm8gKG9rKSBidHBueiB0Mywgb2sgZW5kKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyNjUsMTQgKzEyNjUsODggQEAg
X2xsaW50X29wX3B1dF9ieV9pZDoKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVDZWxsKHQzLCB0MCwgLm9wUHV0QnlJZFNsb3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QwXSwgdDIKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmlu
ZXEgdDIsIHQxLCAub3BQdXRCeUlkU2xvdworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0
MikKKyAgICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNs
b3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJy
ZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAj
IHQwIC0+IG9iamVjdCBiYXNlCiAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVj
dGlvbig4LCB0MSkKKworICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+
IG9iamVjdCBiYXNlCisgICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1
cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56
IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXIKKworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1
cmUgdHlwZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlTWFzaywgdDEKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmlu
ZywgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUg
b2YgdGhlIGZvbGxvd2luZzogU3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAg
IGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5
cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVj
dE9yT3RoZXIgb3IgVG9wLgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAu
b3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVj
dE9yT3RoZXIuCisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVj
dAorLm9wUHV0QnlJZFR5cGVDaGVja090aGVyOgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwg
dDMKKyAgICBicWVxIHQzLCBWYWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmpl
Y3RPck90aGVyOgorICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0
cW56IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkU2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlT2JqZWN0LCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0Nl
bGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBi
YmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVz
c1RoYW5TdHJpbmc6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwg
Qm9vbGVhbiwgT3RoZXIsIEludDMyLCBOdW1iZXIKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZUludDMyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBX
ZSBhcmUgZWl0aGVyIEludDMyIG9yIE51bWJlci4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU51bWJlciwgLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcgorCisgICAgYnFhZXEgdDMs
IHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQ
dXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0
YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0
QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBh
cmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBu
ZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0Jv
dHRvbU9yT3RoZXIKKyAgICB4b3JxIFZhbHVlRmFsc2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQ
dXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0
dXJlCisgICAgYnRwbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
KworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgdXJzaGlmdHAg
MywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJ
ZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzOgogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiAr
MjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBMb3dlc3RUYWcgPSBEZWxldGVkVmFsdWVUYWcKIGVu
ZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbiBzeW5jIHdpdGggd2hhdCBp
cyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYK
K2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MAorY29uc3QgUHV0QnlJZFBy
aW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MgorY29uc3QgUHV0QnlJZFByaW1hcnlU
eXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQKK2NvbnN0IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgw
Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgKK2NvbnN0IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMy
ID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwCitjb25zdCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
ID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCisKIGNvbnN0IENh
bGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQgb3IgQVJNNjQgb3IgQ19MT09QCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxODk5
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAj
aW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkNvbXBpbGF0aW9u
UmVzdWx0LmgiCi0jaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZv
LmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEluZmVycmVkVHlwZUZpcmVEZXRh
aWwgOiBwdWJsaWMgRmlyZURldGFpbCB7CitwdWJsaWM6CisgICAgSW5mZXJyZWRUeXBlRmlyZURl
dGFpbCgKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsCisgICAgICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgb2xkRGVz
Y3JpcHRvciwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBuZXdEZXNjcmlwdG9yLAor
ICAgICAgICBKU1ZhbHVlIG9mZmVuZGluZ1ZhbHVlKQorICAgICAgICA6IG1faW5mZXJyZWRUeXBl
KGluZmVycmVkVHlwZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgICAgICwgbV9vbGREZXNj
cmlwdG9yKG9sZERlc2NyaXB0b3IpCisgICAgICAgICwgbV9uZXdEZXNjcmlwdG9yKG5ld0Rlc2Ny
aXB0b3IpCisgICAgICAgICwgbV9vZmZlbmRpbmdWYWx1ZShvZmZlbmRpbmdWYWx1ZSkKKyAgICB7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiSW5m
ZXJyZWQgdHlwZSBjaGFuZ2VkIG9uICIsIFJhd1BvaW50ZXIobV9pbmZlcnJlZFR5cGUpLCAiIGZv
ciBwcm9wZXJ0eSAiLCBtX3VpZCwgIjogIgorICAgICAgICAgICAgIm9sZCB0eXBlIHdhcyAiLCBt
X29sZERlc2NyaXB0b3IsICIgd2hpbGUgZGVzaXJlZCB0eXBlIGlzICIsIG1fbmV3RGVzY3JpcHRv
cik7CisgICAgICAgIGlmIChtX29mZmVuZGluZ1ZhbHVlKQorICAgICAgICAgICAgb3V0LnByaW50
KCIgZHVlIHRvICIsIG1fb2ZmZW5kaW5nVmFsdWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJ
bmZlcnJlZFR5cGUqIG1faW5mZXJyZWRUeXBlOworICAgIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1w
bD4gbV91aWQ7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fb2xkRGVzY3JpcHRvcjsK
KyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9uZXdEZXNjcmlwdG9yOworICAgIEpTVmFs
dWUgbV9vZmZlbmRpbmdWYWx1ZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitj
b25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZSkgfTsKKworSW5mZXJyZWRUeXBl
KiBJbmZlcnJlZFR5cGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJ
bmZlcnJlZFR5cGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVy
cmVkVHlwZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJy
ZWRUeXBlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PElu
ZmVycmVkVHlwZSo+KGNlbGwpOworCisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUp
CisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmaW5mZXJyZWRUeXBl
LT5tX3N0cnVjdHVyZS0+bV9maW5hbGl6ZXIpOworfQorCitJbmZlcnJlZFR5cGU6OktpbmQgSW5m
ZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIHN3aXRj
aCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7CisgICAgY2FzZSBQdXRCeUlkUHJp
bWFyeVR5cGVTZWNvbmRhcnk6CisgICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU1hc2spIHsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbToK
KyAgICAgICAgICAgIHJldHVybiBCb3R0b207CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFy
eVR5cGVCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgICAgIGNhc2Ug
UHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPdGhlcjsKKyAg
ICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJu
IEludDMyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOgorICAgICAg
ICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0
cmluZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGNhc2UgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICBj
YXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVy
biBPYmplY3RPck90aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wOgor
ICAgICAgICAgICAgcmV0dXJuIFRvcDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOwor
ICAgICAgICB9CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZTsKKyAgICBjYXNlIFB1dEJ5SWRQ
cmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICByZXR1cm4gT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICB9Cit9CisK
K0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZh
bHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAg
ICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgcmV0dXJuIE90aGVyOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJl
dHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51
bWJlcjsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0g
dmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5pc1N0cmluZygpKQorICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0
aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRo
U3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUb3A7Cit9CisKK0luZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0
QnlJZEZsYWdzIGZsYWdzKQoreworICAgIEtpbmQga2luZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkK
KyAgICAgICAgc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29k
ZVN0cnVjdHVyZUlEKGZsYWdzKSk7CisgICAgZWxzZQorICAgICAgICBzdHJ1Y3R1cmUgPSBudWxs
cHRyOworICAgIHJldHVybiBEZXNjcmlwdG9yKGtpbmQsIHN0cnVjdHVyZSk7Cit9CisKK1B1dEJ5
SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnB1dEJ5SWRGbGFncygpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwg
UHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20pOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25k
YXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuKTsKKyAgICBjYXNlIE90aGVyOgorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVT
ZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyKTsKKyAgICBjYXNlIEludDMyOgor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyKTsKKyAgICBjYXNlIE51bWJl
cjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1h
cnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIpOworICAgIGNhc2Ug
U3RyaW5nOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlk
UHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyk7CisgICAg
Y2FzZSBPYmplY3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0KTsK
KyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0T3JPdGhlcik7CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlVG9wKTsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAgICAgICAgICAgUHV0QnlJZFBy
aW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0
dXJlLT5pZCgpKSk7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlE
KG1fc3RydWN0dXJlLT5pZCgpKSk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFB1dEJ5SWROb25lOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCit7CisgICAgLy8gRmls
dGVyIG91dCBjb21tb24gdGhpbmdzIHRvIHNpbXBsaWZ5IHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJl
bG93LgorICAgIGlmICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChv
dGhlci5tX2tpbmQgPT0gQm90dG9tKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuOgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAq
dGhpcyA9IFRvcDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgICp0
aGlzID0gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwgb3RoZXIuc3RydWN0
dXJlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIEludDMy
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE51bWJlcjoK
KyAgICAgICAgICAgICp0aGlzID0gTnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6IC8vIElm
IHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4n
dCBtYXRjaC4KKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVj
dDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVy
ZSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAg
ICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgaWYgKG1f
c3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1
Y3R1cmVzIGRpZG4ndCBtYXRjaC4KKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAg
ICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICBjYXNlIE9iamVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3Ro
ZXI6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3Ro
ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAq
dGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2Jq
ZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9w
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBUb3A6CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAg
ICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
IHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29s
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRvciBtZXJnZWQgPSAqdGhpczsKKyAgICBtZXJnZWQu
bWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAqdGhpcyA9PSBtZXJnZWQ7Cit9CisKK3ZvaWQgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAg
IGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6IiwgaW5Db250ZXh0KCptX3N0
cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBu
dWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5cGUoVk0mIHZtKQorICAgIDog
QmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV93YXRjaHBv
aW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRU
eXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAg
aWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3ApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpID09IGV4cGVjdGVkOworfQorCitib29sIElu
ZmVycmVkVHlwZTo6Y2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gY2FuV2F0Y2go
bG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRv
cCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChs
b2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIs
IGRlc2NyaXB0b3IoKSk7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNs
b3coVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgRGVzY3JpcHRvciBt
eVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3JpcHRvciBvdGhlclR5cGUgPSBE
ZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5cGUubWVyZ2Uob3RoZXJUeXBl
KTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0gbXlUeXBlKTsgLy8gVGhlIHR5
cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KKworICAgIHNl
dChsb2NrZXIsIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBteVR5cGUpOworCisgICAgcmV0dXJu
IGtpbmQobG9ja2VyKSAhPSBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2VyLCB2bSwgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKCksIFRvcCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoCisgICAgY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgb2ZmZW5kaW5nVmFsdWUsCisgICAgRGVzY3JpcHRvciBuZXdEZXNj
cmlwdG9yKQoreworICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBo
b2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQg
dGhhdAorICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBk
ZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0
IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZl
bnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9u
J3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5l
d0Rlc2NyaXB0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRv
ciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJU
KG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJ
ZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQg
Y2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2Nr
ZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFT
U0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpKTsKKworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBz
dXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBu
b3cuIElmCisgICAgLy8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8g
VG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlm
IChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAg
Ly8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhl
biB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0
LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAgSW5mZXJyZWRUeXBlRmlyZURl
dGFpbCBkZXRhaWwoCisgICAgICAgICAgICB0aGlzLCBwcm9wZXJ0eU5hbWUudWlkKCksIGRlc2Ny
aXB0b3IobG9ja2VyKSwgbmV3RGVzY3JpcHRvciwgb2ZmZW5kaW5nVmFsdWUpOworICAgICAgICAK
KyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNv
bWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhpcyB0eXBlIGFuZAorICAgICAg
ICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMg
Y3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5ncyBmb3IKKyAgICAgICAgLy8g
aXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAgICAgICAgbV93YXRjaHBvaW50
U2V0LmZpcmVBbGwoZGV0YWlsKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZl
cnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgaWYgKCFu
ZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7
CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQg
b25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUg
c3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlw
dG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJy
ZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50
KCZtX3N0cnVjdHVyZS0+bV93YXRjaHBvaW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRvciBraW5kLgorICAgIG1fa2luZCA9IG5ld0Rlc2Ny
aXB0b3Iua2luZCgpOworCisgICAgLy8gQXNzZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KKyAgICBB
U1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICAvLyBGSVhNRTogRmluZCBhbiBl
bGVnYW50IGFuZCBjaGVhcCB3YXkgdG8gdGhyZWFkIGluZm9ybWF0aW9uIGFib3V0IHdoeSB3ZSBn
b3QgaGVyZSBpbnRvIHRoZSBmaXJlCisgICAgLy8gZGV0YWlsIGluIHNldCgpLgorICAgIAorICAg
IFZNJiB2bSA9ICpIZWFwOjpoZWFwKHRoaXMpLT52bSgpOworCisgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3Ig
PSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRvci5yZW1vdmVTdHJ1Y3R1cmUo
KTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgUHJvcGVydHlOYW1lKG51bGxwdHIpLCBKU1Zh
bHVlKCksIG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRT
dHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCit7Cisg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KKyAgICAgICAgYml0d2lz
ZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBtX3dhdGNocG9p
bnQpKTsKKworICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJl
KCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcjo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZl
cnJlZFN0cnVjdHVyZSA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+
KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRP
RihJbmZlcnJlZFN0cnVjdHVyZSwgbV9maW5hbGl6ZXIpKTsKKworICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQpKTsKKyAgICAKKyAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKGluZmVycmVkU3RydWN0dXJlLT5tX3N0cnVjdHVyZS5nZXQoKSkpCisgICAg
ICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisK
K0luZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2
bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogbV9w
YXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQor
eworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZl
cnJlZFR5cGU6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIG91dC5w
cmludCgiQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
IG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6U3RyaW5nOgorICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBv
dXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk9iamVj
dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3Ro
ZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgb3V0LnByaW50KCJUb3AiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlX2gKKworI2luY2x1
ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAi
UHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCisjaW5jbHVkZSAiV2F0
Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNl
ZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCisK
K2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUo
Vk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lO
Rk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAorICAgICAg
ICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAgIE51bWJl
ciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAgICAg
ICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBP
YmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisgICAgc3RhdGljIEtpbmQga2lu
ZEZvckZsYWdzKFB1dEJ5SWRGbGFncyk7CisgICAgCisgICAgc3RhdGljIGJvb2wgaGFzU3RydWN0
dXJlKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIERl
c2NyaXB0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVzY3JpcHRvcigpCisgICAgICAgICAg
ICA6IG1fa2luZChCb3R0b20pCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlc2NyaXB0b3IoS2luZCBraW5kLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIpCisgICAgICAgICAgICA6IG1fa2luZChraW5kKQor
ICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVj
dHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShK
U1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JGbGFncyhWTSYsIFB1dEJ5
SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgIT0gQm90dG9tIHx8IG1fc3RydWN0dXJl
OworICAgICAgICB9CisKKyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmU7IH0KKworICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzKCkgY29uc3Q7CisK
KyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFsdWUoSlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgICAgIGNh
c2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNh
c2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7Cisg
ICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAgY2FzZSBOdW1iZXI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7CisgICAgICAgICAgICBjYXNlIFN0
cmluZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmcoKTsKKyAgICAgICAg
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJl
OworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQorICAgICAgICAgICAgICAg
ICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09
IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVy
OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IHZh
bHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIFRvcDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8
U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
a2luZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBtZXJnZShjb25zdCBEZXNjcmlw
dG9yJik7CisgICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb3Ro
ZXIgb25lLgorICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBjb25zdDsK
KworICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5kOworICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0
dXJlOworICAgIH07CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJl
ID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAg
IERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgIH0KKyAg
ICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9j
a2VyKTsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKTsgfQor
CisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBUb3A7IH0KKyAgICBi
b29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRl
ciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNj
cmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNj
cmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRE
ZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNs
b3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIH0KKworICAgIC8vIEltbWVkaWF0ZWx5
IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50LgorICAgIHZvaWQgbWFrZVRvcChWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWFrZVRvcFNsb3codm0sIHByb3BlcnR5TmFtZSk7
CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5z
ZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRo
YXQKKyAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgorICAgIGJv
b2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNj
cmlwdG9yJik7CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7CisgICAgCisg
ICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
V2F0Y2hwb2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJl
ZFR5cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAgICBib29sIHdpbGxTdG9yZVZh
bHVlU2xvdyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xv
dyhWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYsIFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBEZXNjcmlwdG9yKTsKKyAgICB2b2lk
IHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xv
Y2s7CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKKworICAgIGNsYXNzIEluZmVy
cmVkU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRl
OworICAgIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplciA6IHB1Ymxp
YyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVk
U3RydWN0dXJlRmluYWxpemVyKCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIElu
ZmVycmVkU3RydWN0dXJlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
cHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVkVHlwZSogcGFy
ZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEluZmVycmVkVHlwZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3RydWN0
dXJlRmluYWxpemVyOworICAgICAgICAKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVudDsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAgICAg
SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsKKyAgICAgICAgSW5mZXJy
ZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgbV9maW5hbGl6ZXI7CisgICAgfTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RFOiBJ
ZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0
IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQorICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2gg
aXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2
ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8gdGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRo
ZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxpbmVX
YXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxl
LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25z
dCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZVRh
YmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKKwor
SW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQorewor
ICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsKKyAg
ICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5
cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJs
ZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGVU
YWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxs
KTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGluZmVycmVkVHlwZVRhYmxlLT5t
X2xvY2spOworICAgIAorICAgIGZvciAoYXV0byYgZW50cnkgOiBpbmZlcnJlZFR5cGVUYWJsZS0+
bV90YWJsZSkgeworICAgICAgICBpZiAoIWVudHJ5LnZhbHVlKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXNSZWxldmFudCgpKQorICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJmVudHJ5LnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZW50cnkudmFsdWUuY2xlYXIoKTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRU
eXBlVGFibGU6OmdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKKyAgICBpZiAo
aXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcHJ1bmUgaW52YWxpZGF0
ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNSZWxldmFudCgpKSB7CisgICAgICAg
IGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJl
ZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZ2V0KGxvY2tlciwgdWlkKTsK
K30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIGdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworfQor
Citib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1ZSgKKyAgICBWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFN0b3JlZFByb3BlcnR5QWdl
IGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRo
YXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICAKKyAgICBpZiAo
YWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9
IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBt
X3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKyAgICAgICAgCisgICAgICAgIGlmIChpdGVy
LT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRSZXN1
bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBX
cml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KSB7CisgICAgICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRU
eXBlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhpcywgaW5mZXJyZWRUeXBlKTsKKyAg
ICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPndpbGxTdG9yZVZhbHVl
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3Jp
dGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVz
IHRoZSBoYXNoIG1hcC4KKyAgICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFRh
YmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkp
OworICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybjsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKworICAgICAg
ICBpdGVyLT52YWx1ZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgaXRlci0+
dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRhYmxlVHlwZTo6
QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgICAgIHJlc3VsdCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZS51
aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7CisgICAgfQorICAgIGlmICghcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSk7CisgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworfQorCitJbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRU
eXBlVGFibGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1
Y3R1cmUuZ2V0KCkpCit7Cit9CisKK0luZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFi
bGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUg
SW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMg
aXMgYSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVz
dHJ1Y3RvciBhbmQgbWFrZXMgbGlmZXRpbWUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUs
IHNpbmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJl
IGRlbGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20g
UHJvcGVydHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBh
biBJbmZlcnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVz
IChpZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBp
biBzb21lIFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUg
dHlwZXMgb2YgcHJvcGVydGllcyBmcm9tCisvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlm
IHRoZSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2Ns
YXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSog
Y3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xv
Y2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0
eSgpOyB9CisKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBu
dWxscHRyIGZvciBib3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUK
KyAgICAvLyBvd25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHku
CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1
ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwq
KTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUpOworCisgICAgZW51bSBTdG9y
ZWRQcm9wZXJ0eUFnZSB7CisgICAgICAgIE5ld1Byb3BlcnR5LAorICAgICAgICBPbGRQcm9wZXJ0
eQorICAgIH07CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUg
Zm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdz
IG5vdAorICAgIC8vIHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3
aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1
ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCisgICAg
Ly8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRl
dGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChW
TSYsIFByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCitwcml2YXRlOgorICAgIElu
ZmVycmVkVHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICAv
LyBCb3R0b206IGFic2VuY2UgZnJvbSB0YWJsZS4KKyAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4g
dGFibGUsICF2YWx1ZS0+aXNSZWxldmFudCgpLCBvciBhYnNlbmNlIGZyb20gdGFibGUuCisgICAg
Ly8KKyAgICAvLyBXZSBrbm93IGhvdyB0byBkZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0
YWJsZSBpcyBib3R0b20gb3IgdG9wIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIC8vIHBy
b3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIG93bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRp
bmcgb24gdGhlIHN0cnVjdHVyZSwgYWJzZW5jZSBtYXkgaGF2ZQorICAgIC8vIGRpZmZlcmVudCBt
ZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRoaXMgY2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5n
IHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkKKyAgICAvLyBpcyB0aGF0IHdlIGRpZmZl
cmVudGlhdGUgYmV0d2VlbiBhY3Rpb25zOiByZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3Jl
IGFkZGluZyBhIG5ldyBwcm9wZXJ0eQorICAgIC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNl
IG1lYW5zIGJvdHRvbS4gSWYgd2UncmUgc3RvcmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAo
cmVwbGFjZSksIHRoZW4KKyAgICAvLyBhYnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdv
cmssIHdlIGhhdmUgdG8gd2F0Y2ggb3V0IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJl
cywgUzEgYW5kCisgICAgLy8gUzIsIHNoYXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFu
ZCBuZWl0aGVyIG9mIHRoZW0gaW5pdGlhbGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5
CisgICAgLy8gd2FudCB0byBhZGQgUCB3aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQg
dG8gYWRkIFAgd2l0aCBhIHR5cGUuIElmIFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAg
IC8vIHRvIGluZGljYXRlIFRvcCwgdGhlbiBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1l
YW4gQm90dG9tIGFuZCB3b3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50
cnkgaW4gdGhlIHRhYmxlLiBUaGVuIFMxIHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3As
IGFuZCB3b3VsZCB1c2UgUzIncyB0eXBlLiBDbGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdl
IGF2b2lkIHN1Y2ggY29uZnVzaW9uIGJ5IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5
cyBhZGRzIGFuIGVudHJ5LiBIZW5jZSwKKyAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5
IGNvbWVzIGludG8gcGxheSBmb3IgcHJvcGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVk
VHlwZVRhYmxlIHdhcworICAgIC8vIGNyZWF0ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlm
aWVyUmVwSGFzaCwgSGFzaFRyYWl0czxVbmlxdWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7Cisg
ICAgCisgICAgVGFibGVUeXBlIG1fdGFibGU7CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBs
b2NrIHdoZW4gd2UncmUgZG9pbmcgbW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9y
IHJlYWRzIG9uIHRoZSBjb21waWxlcgorICAgIC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVh
ZCBpcyBub3QgYWxsb3dlZCB0byBkbyBtb2RpZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRM
b2NrIG1fbG9jazsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJy
ZWRUeXBlVGFibGVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKSB7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkp
OworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0
KSB7CkBAIC0xMjI3LDI5ICsxMjI5LDQwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbnRlcm5hbCgKIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3Vy
cmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0g
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIG9mZnNldCkpIHsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAg
ICAgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgaWYg
KG5ld1N0cnVjdHVyZSkgeworICAgICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9y
VHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNv
bnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAKICAgICAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IGJ1dHRlcmZseSgpOwotICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAh
PSB0aGlzLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOworICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAh
PSB0aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAg
ICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CisgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAg
ICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAg
ICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKICAgICBp
ZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1v
ZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAg
IHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWQpOworICAgICAgICB9CisKICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAK
QEAgLTEyNjgsMTYgKzEyODEsMTkgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogICAgIC8vIHdlIHdhbnQuCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKICAgICAKLSAgICBzdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdh
dGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7Cisg
ICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWQpOwogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJU
KHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgc2V0U3RydWN0dXJlQW5k
UmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlz
LCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVj
dHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgbmV3U3RydWN0
dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xMzM1LDggKzEzNTEsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVj
dFdpdGhvdXRUcgogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkK
ICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZM
aW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCks
IG5ld0J1dHRlcmZseSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUoKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAgYm9v
bCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOworICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVG
b3JUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Cisg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODk5MjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTAsMTEgKzM1MCwxNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlz
LCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJl
ZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUo
KTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91
cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2
aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1
cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQorICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJy
ZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zm
c2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0K
ICAgICAKQEAgLTQ2NCw2ICs0NjgsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmli
dXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlv
biwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAg
IHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKKyAgICB0cmFuc2l0
aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRyYW5z
aXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtNDc5LDYgKzQ4
NCwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAKIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQm
IG9mZnNldCkKIHsKKyAgICAvLyBOT1RFOiBUaGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMgd2h5
IHRoaXMgZ29lcyBkaXJlY3RseSB0byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IHJhdGhlciB0aGFu
CisgICAgLy8gY2FjaGluZyB0aGUgcmVtb3ZhbC4gV2UgY2FuIGZpeCBhbGwgb2YgdGhlc2UgdGhp
bmdzLCBidXQgd2UgbXVzdCByZW1lbWJlciB0byBkbyBzbywgaWYgd2UgZXZlciB0cnkKKyAgICAv
LyB0byBvcHRpbWl6ZSB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAtIENhY2hlZCB0cmFuc2l0
aW9ucyB1c3VhbGx5IHN0ZWFsIHRoZSBwcm9wZXJ0eSB0YWJsZSwgYW5kIGFzc3VtZSB0aGF0IHRo
aXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGV5CisgICAgLy8gICBjYW4ganVzdCByZWJ1aWxkIHRo
ZSB0YWJsZSBieSBsb29raW5nIGF0IHBhc3QgdHJhbnNpdGlvbnMuIFRoYXQgY29kZSBhc3N1bWVz
IHRoYXQgdGhlIHRhYmxlIG9ubHkKKyAgICAvLyAgIGdyZXcgYW5kIG5ldmVyIHNocmFuay4gVG8g
c3VwcG9ydCByZW1vdmFscywgd2UnZCBoYXZlIHRvIGNoYW5nZSB0aGUgcHJvcGVydHkgdGFibGUg
bWF0ZXJpYWxpemF0aW9uCisgICAgLy8gICBjb2RlIHRvIGhhbmRsZSBkZWxldGlvbnMuIEFsc28s
IHdlIGhhdmUgbG9naWMgdG8gZ2V0IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgb24gYSBzdHJ1Y3R1
cmUgdGhhdAorICAgIC8vICAgbGFja3MgYSBwcm9wZXJ0eSB0YWJsZSBieSBqdXN0IGxvb2tpbmcg
YmFjayB0aHJvdWdoIHRoZSBzZXQgb2YgdHJhbnNpdGlvbnMgc2luY2UgdGhlIGxhc3QKKyAgICAv
LyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBpbm5lZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBh
bHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBoYW5kbGUgY2FjaGVkCisgICAgLy8gICByZW1vdmFs
cy4KKyAgICAvLworICAgIC8vIC0gSW5mZXJyZWRUeXBlVGFibGUgYXNzdW1lcyB0aGF0IHJlbW92
YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSBpZiB3ZSBjb3Vs
ZAorICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVydHkgYW5kIHRoZW4gcmUtYWRkIGl0IGxhdGVyLCB0
aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3AiIG9wdGltaXphdGlvbiB3b3VsZG4ndAorICAgIC8v
ICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVtb3ZhbCBhbHNvIGVpdGhlciBwb2lzb25lZCB0eXBl
IGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRoaW5nIGVxdWl2YWxlbnQgdG8KKyAgICAvLyAgIGhh
c0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJvbmdseSBtYXJraW5nIHRoZSBlbnRyeSBhcyBUb3Ag
YnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QgYWJzZW50LCBidXQKKyAgICAvLyAgIGluc3RlYWQs
IGhhcyBhIG51bGwgZW50cnkuCisgICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtODQxLDYgKzg2
NCw0MyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvCiAgICAgc2V0
RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjp3
aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplLAorICAgIEluZmVycmVkVHlwZVRh
YmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygp
KTsKKyAgICBBU1NFUlQoIWhhc0JlZW5EaWN0aW9uYXJ5KCkpOworCisgICAgLy8gQ3JlYXRlIHRo
ZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBzbyB0aGF0
IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQorICAgIC8vIGdyYWJiZWQgYSBwb2lu
dGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUg
PSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgIGlmICghdGFibGUpIHsKKyAgICAgICAg
dGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVUYWJsZS5zZXQodm0sIHRoaXMs
IHRhYmxlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEg
cHJvcGVydHkgdGFibGUuCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKKyAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOworCisg
ICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdp
dmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0IHdhcyBwcmVzZW50CisgICAgLy8gYWxy
ZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEgcHJvcGVydHkgdGFibGUgbm93LgorICAgIEFTU0VSVChw
cm9wZXJ0eVRhYmxlKTsKKworICAgIC8vIC4uLiBhbmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJl
c2VudC4KKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChw
cm9wZXJ0eU5hbWUudWlkKCkpOworICAgIEFTU0VSVChlbnRyeSk7CisKKyAgICBpZiAoc2hvdWxk
T3B0aW1pemUpCisgICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2lsbFN0
b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFnZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIHRhYmxlLT5tYWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUsIGFnZSk7CisgICAgICAgIGVudHJ5
LT5oYXNJbmZlcnJlZFR5cGUgPSBmYWxzZTsKKyAgICB9Cit9CisKICNpZiBEVU1QX1BST1BFUlRZ
TUFQX1NUQVRTCiAKIFByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMqIHByb3BlcnR5TWFwSGFzaFRh
YmxlU3RhdHMgPSAwOwpAQCAtMTA1OCw2ICsxMTE4LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJv
cGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5z
YWZlLmNsZWFyKCk7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbmZlcnJl
ZFR5cGVUYWJsZSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4OTkyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRl
ICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRl
ICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKQEAgLTgxLDExICs4MiwxMyBAQCBzdHJ1
Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGtleTsKICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdWludDhfdCBhdHRyaWJ1dGVzOworICAgIGJvb2wg
aGFzSW5mZXJyZWRUeXBlOyAvLyBUaGlzIGNhY2hlcyB3aGV0aGVyIG9yIG5vdCBhIHByb3BlcnR5
IGhhcyBhbiBpbmZlcnJlZCB0eXBlIGluIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlLCBhbmQgaXMg
dXNlZCBmb3IgYSBmYXN0IGNoZWNrIGluIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgpLgog
CiAgICAgUHJvcGVydHlNYXBFbnRyeSgpCiAgICAgICAgIDoga2V5KG51bGxwdHIpCiAgICAgICAg
ICwgb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcygwKQorICAgICAg
ICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTMsNiAr
OTYsNyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgICAgIDoga2V5KGtleSkKICAg
ICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykK
KyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
dGhpcy0+YXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVzKTsKICAgICB9CkBAIC0zMjMsNiArMzI3LDcg
QEAgcHVibGljOgogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpOwogCiAgICAgLy8gVGhpcyBp
cyBhIHNvbWV3aGF0IGludGVybmFsaXNoIG1ldGhvZC4gSXQgd2lsbCBjYWxsIHlvdXIgZnVuY3Rv
ciB3aGlsZSBwb3NzaWJseSBob2xkaW5nIHRoZQogICAgIC8vIFN0cnVjdHVyZSdzIGxvY2suIFRo
ZXJlIGlzIG5vIGd1YXJhbnRlZSB3aGV0aGVyIHRoZSBsb2NrIGlzIGhlbGQgb3Igbm90IGluIGFu
eSBwYXJ0aWN1bGFyCkBAIC00ODEsNiArNDg2LDQwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsK
ICAgICB9CiAKKyAgICBib29sIGhhc0luZmVycmVkVHlwZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEhbV9pbmZlcnJlZFR5cGVUYWJsZTsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5
cGUqIGluZmVycmVkVHlwZUZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAg
ICAgaWYgKEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0
KCkpCisgICAgICAgICAgICByZXR1cm4gdGFibGUtPmdldCh1aWQpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRU
eXBlRGVzY3JpcHRvckZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAg
aWYgKEluZmVycmVkVHlwZSogcmVzdWx0ID0gaW5mZXJyZWRUeXBlRm9yKHVpZCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LT5kZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiBJbmZlcnJl
ZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFs
dWVGb3JUcmFuc2l0aW9uKAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBp
ZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAoIXNob3VsZE9wdGltaXplICYmICFtX2luZmVycmVk
VHlwZVRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVT
bG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBl
VGFibGU6Ok5ld1Byb3BlcnR5KTsKKyAgICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxT
dG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQorICAgIHsKKyAgICAg
ICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1p
emUsIEluZmVycmVkVHlwZVRhYmxlOjpPbGRQcm9wZXJ0eSk7CisgICAgfQorCiAgICAgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVlKTsKICAgICAKICAg
ICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc3RydWN0dXJlcyBtYXRjaCBlbm91Z2ggdGhhdCB0
aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBhbGxvY2F0aW9ucwpAQCAtNjMyLDYgKzY3MSw5IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVz
KFZNJik7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdpbGxTdG9yZVZhbHVlU2xvdygK
KyAgICAgICAgVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wsIEluZmVycmVkVHlwZVRh
YmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSk7CisKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJh
bnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9u
TGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKQEAgLTY1NSw2ICs2OTcsOCBAQCBwcml2
YXRlOgogICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4g
RHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCiAgICAgV3Jp
dGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIAorICAgIFdy
aXRlQmFycmllcjxJbmZlcnJlZFR5cGVUYWJsZT4gbV9pbmZlcnJlZFR5cGVUYWJsZTsKKwogICAg
IG11dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0Owog
CiAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0X2ZpdHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3JlZFBy
b3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8o
KSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwotICAgIGlmICghcHJvcGVy
dHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU1h
cEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwot
ICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlkT2Zmc2V0OworICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJu
IGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogfQog
ICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogeworICAg
IGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxXQVlTX0lOTElORSBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpCit7CiAgICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3IEBAIEFMV0FZU19JTkxJTkUg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7CisgICAgaGFzSW5mZXJyZWRU
eXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1cm4gZW50cnktPm9mZnNldDsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIK
KyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCkBA
IC0yNDEsNiArMjQyLDggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJl
ZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJy
ZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlv
blJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZXhj
ZXB0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhp
cywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg5OTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAt
MzAyLDYgKzMwMiw4IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRh
YmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CisgICAgU3Ry
b25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1
bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXhjZXB0aW9u
U3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVy
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLW9i
amVjdC10aGVuLXN0cmluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1vYmplY3QtdGhlbi1zdHJpbmcuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1vYmplY3Qt
dGhlbi1zdHJpbmcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24g
Zm9vKG8pIHsKKyAgICByZXR1cm4gby5mID09IHt0b1N0cmluZzpmdW5jdGlvbigpIHsgcmV0dXJu
ICJoZWxsbyI7IH19OworfQorCitmdW5jdGlvbiBiYXIobywgdikgeworICAgIG8uZiA9IHY7Cit9
CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCit2YXIgbyA9IHt9OworZm9yICh2
YXIgaSA9IDA7IGkgPCA1OyArK2kpCisgICAgYmFyKG8sIHt9KTsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVz
dWx0ICE9PSBmYWxzZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfQorCitiYXIobywgImhlbGxvIik7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJl
c3VsdCAhPT0gdHJ1ZSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsg
cmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5
cGUtc3RyaW5nLXRoZW4tb2JqZWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cmluZy10aGVuLW9iamVjdC5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0
cmluZy10aGVuLW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACitmdW5j
dGlvbiBmb28obykgeworICAgIHJldHVybiBvLmYgKyAiIHdvcmxkIjsKK30KKworZnVuY3Rpb24g
YmFyKG8sIHYpIHsKKyAgICBvLmYgPSB2OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUo
YmFyKTsKKwordmFyIG8gPSB7fTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKQorICAgIGJh
cihvLCAiaGVsbG8iKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAg
dmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVzdWx0ICE9ICJoZWxsbyB3b3JsZCIpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworYmFyKG8s
IHt0b1N0cmluZzogZnVuY3Rpb24oKSB7IHJldHVybiAiaGVsbG8iOyB9fSk7Cit2YXIgcmVzdWx0
ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPSAiaGVsbG8gd29ybGQiKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTI5
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgcHJvcGVydHkgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODYxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGVBZGRSZXN1bHQ6Okhhc2hUYWJsZUFkZFJlc3VsdCk6IE1ha2UgaXQgcG9zc2li
bGUgdG8gc2F5ICJIYXNoTWFwOjpBZGRSZXN1bHQgcmVzdWx0IiB3aXRob3V0IGFzc2lnbmluZyBh
bnl0aGluZyB0byBpdCB5ZXQuCisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmg6CisgICAgICAg
IChXVEY6OnByaW50SW50ZXJuYWwpOiBCZWVmIHVwIHByaW50aW5nIG9mIHNvbWUgY29tbW9uIFdU
RiB0eXBlcywgaW4gcGFydGljdWxhciBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LgorCiAyMDE1
LTA5LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBT
aGFkb3dSb290IGludGVyZmFjZSBhbmQgRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPiBzdHJ1Y3Qg
SGFzaFRhYmxlQWRkUmVzdWx0IHsKKyAgICAgICAgSGFzaFRhYmxlQWRkUmVzdWx0KCkgOiBpc05l
d0VudHJ5KGZhbHNlKSB7IH0KICAgICAgICAgSGFzaFRhYmxlQWRkUmVzdWx0KEl0ZXJhdG9yVHlw
ZSBpdGVyLCBib29sIGlzTmV3RW50cnkpIDogaXRlcmF0b3IoaXRlciksIGlzTmV3RW50cnkoaXNO
ZXdFbnRyeSkgeyB9CiAgICAgICAgIEl0ZXJhdG9yVHlwZSBpdGVyYXRvcjsKICAgICAgICAgYm9v
bCBpc05ld0VudHJ5OwpJbmRleDogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCShyZXZpc2lvbiAxODk5MjkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpA
QCAtNzQsMTIgKzc1LDE0IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwo
UHIKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBj
b25zdCBTdHJpbmdJbXBsKik7CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0
LCBiaXR3aXNlX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwq
IHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBiaXR3aXNlX2Nhc3Q8Y29uc3QgU3RyaW5nSW1w
bCo+KHZhbHVlKSk7IH0KK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCAm
dmFsdWUpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNo
YXIqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
dmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBD
U3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1N0
cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgU3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29u
c3QgU3RyaW5nJj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJ
bnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqPih2YWx1ZSkp
OyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
VW5pcXVlZFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CitpbmxpbmUgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFVuaXF1ZWRTdHJpbmdJbXBsJiB2YWx1ZSkgeyBwcmludEludGVy
bmFsKG91dCwgJnZhbHVlKTsgfQogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIGJvb2wpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIHNpZ25lZCBjaGFyKTsgLy8gTk9URTogdGhpcyBwcmludHMgYXMg
YSBudW1iZXIsIG5vdCBhcyBhIGNoYXJhY3RlcjsgdXNlIENoYXJhY3RlckR1bXAgaWYgeW91IHdh
bnQgdGhlIGNoYXJhY3RlcgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOyAvLyBOT1RFOiBzZWUgYWJvdmUuCkBAIC0xNjks
NiArMTcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb24KICAg
ICBvdXQucHJpbnQocG9pbnRlckR1bXAodmFsdWUuZ2V0KCkpKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBSZWZQ
dHI8VD4mIHZhbHVlKQoreworICAgIG91dC5wcmludChwb2ludGVyRHVtcCh2YWx1ZS5nZXQoKSkp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogY2xhc3MgVmFsdWVJbkNv
bnRleHQgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261488</attachid>
            <date>2015-09-17 22:12:28 -0700</date>
            <delta_ts>2015-09-21 12:09:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>226250</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyOSBA
QAorMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgcHJvcGVydHkgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODYxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGJyaW5ncyByZWN1cnNpdmUgdHlw
ZSBpbmZlcmVuY2UgdG8gSmF2YVNjcmlwdCBvYmplY3QgcHJvcGVydGllcyBpbiBKU0MuIFdlIGNo
ZWNrIHRoYXQgYQorICAgICAgICB2YWx1ZSBiZWluZyBzdG9yZWQgaW50byBhIHByb3BlcnR5IG9i
ZXlzIGEgcHJvcGVydHkncyB0eXBlIGJlZm9yZSB3ZSBkbyB0aGUgc3RvcmUuIElmIGl0IGRvZXNu
J3QsCisgICAgICAgIHdlIGJyb2FkZW4gdGhlIHByb3BlcnR5J3MgdHlwZSB0byBpbmNsdWRlIHRo
ZSBuZXcgdmFsdWUuIElmIG9wdGltaXplZCBjb2RlIHdhcyByZWx5aW5nIG9uIHRoZSBvbGQKKyAg
ICAgICAgdHlwZSwgd2UgZGVvcHRpbWl6ZSB0aGF0IGNvZGUuCisKKyAgICAgICAgVGhlIHR5cGUg
c3lzdGVtIHRoYXQgdGhpcyBzdXBwb3J0cyBpbmNsdWRlcyBpbXBvcnRhbnQgcHJpbWl0aXZlIHR5
cGVzIGxpa2UgSW50MzIgYW5kIEJvb2xlYW4uIEJ1dAorICAgICAgICBpdCBnb2VzIGZ1cnRoZXIg
YW5kIGFsc28gaW5jbHVkZXMgYSB0eXBlIGtpbmQgY2FsbGVkIE9iamVjdFdpdGhTdHJ1Y3R1cmUs
IHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAgICAgZXhwZWN0IHRoZSBwcm9wZXJ0eSB0byBhbHdh
eXMgcG9pbnQgdG8gb2JqZWN0cyB3aXRoIGEgcGFydGljdWxhciBzdHJ1Y3R1cmUuIFRoaXMgb25s
eSB3b3JrcyBmb3IKKyAgICAgICAgbGVhZiBzdHJ1Y3R1cmVzIChpLmUuIHN0cnVjdHVyZXMgdGhh
dCBoYXZlIGEgdmFsaWQgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHNldCkuIEludmFsaWRhdGlvbiBv
ZiB0aGUKKyAgICAgICAgdHJhbnNpdGlvbiBzZXQgY2F1c2VzIHRoZSBwcm9wZXJ0eSB0eXBlIHRv
IGJlY29tZSBPYmplY3QgKG1lYW5pbmcgYW4gb2JqZWN0IHdpdGggYW55IHN0cnVjdHVyZSkuCisg
ICAgICAgIFRoaXMgY2FwYWJpbGl0eSBnaXZlcyB1cyByZWN1cnNpdmUgdHlwZSBpbmZlcmVuY2Uu
IEl0J3MgcG9zc2libGUgZm9yIGFuIGV4cHJlc3Npb24gbGlrZSAiby5mLmcuaCIKKyAgICAgICAg
dG8gZXhlY3V0ZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrcyBpZiAuZiBhbmQgLmcgYXJlIGJvdGgg
T2JqZWN0V2l0aFN0cnVjdHVyZS4KKworICAgICAgICBUaGUgdHlwZSBpbmZlcmVuY2Ugb2YgYSBw
cm9wZXJ0eSBpcyB0cmFja2VkIGJ5IGFuIEluZmVycmVkVHlwZSBpbnN0YW5jZSwgd2hpY2ggaXMg
YSBKU0NlbGwuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCBpdCBtYW5hZ2VzIGl0cyBvd24gbWVt
b3J5LiBUaGF0J3MgY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIERGRyBpcyBpbnRl
cmVzdGVkIGluCisgICAgICAgIG9uZSBvZiB0aGVzZSwgaXQgY2FuIGp1c3QgbGlzdCB0aGUgSW5m
ZXJyZWRUeXBlIGFzIGEgd2VhayByZWZlcmVuY2UgaW4gYWRkaXRpb24gdG8gc2V0dGluZyBhCisg
ICAgICAgIHdhdGNocG9pbnQuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBkcm9wcGVkIGJ5IHRoZSBvd25pbmcgc3RydWN0dXJlLCB0aGUgREZHCisgICAgICAg
IHdvbid0IHJlYWQgYSBkYW5nbGluZyBwb2ludGVyLiBBIG1hcHBpbmcgZnJvbSBwcm9wZXJ0eSBu
YW1lIHRvIEluZmVycmVkVHlwZSBpcyBpbXBsZW1lbnRlZCBieQorICAgICAgICBJbmZlcnJlZFR5
cGVUYWJsZSwgd2hpY2ggaXMgYWxzbyBhIEpTQ2VsbC4gRWFjaCBTdHJ1Y3R1cmUgbWF5IHBvaW50
IHRvIHNvbWUgSW5mZXJyZWRUeXBlVGFibGUuCisKKyAgICAgICAgVGhpcyBmZWF0dXJlIGNhdXNl
cyBwcm9ncmFtcyB0byBiZSBoYXBwaWVyIChydW4gZmFzdGVyIHdpdGhvdXQgb3RoZXJ3aXNlIGRv
aW5nIGJhZCB0aGluZ3MgbGlrZQorICAgICAgICB1c2luZyBsb3RzIG9mIG1lbW9yeSkgd2hlbiBm
b3VyIGNvbmRpdGlvbnMgaG9sZDoKKworICAgICAgICAxKSBBIHByb3BlcnR5IGNvbnZlcmdlcyB0
byBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgd2Ugc3VwcG9ydC4KKyAgICAgICAgMikgVGhlIHByb3Bl
cnR5IGlzIGxvYWRlZCBmcm9tIG1vcmUgZnJlcXVlbnRseSB0aGFuIGl0IGlzIHN0b3JlZCB0by4K
KyAgICAgICAgMykgVGhlIHN0b3JlcyBhcmUgYWxsIGNhY2hlZCwgc28gdGhhdCB3ZSBzdGF0aWNh
bGx5IGVtaXQgYSB0eXBlIGNoZWNrLgorICAgICAgICA0KSBXZSBkb24ndCBhbGxvY2F0ZSBhIGxv
dCBvZiBtZXRhLWRhdGEgZm9yIHRoZSBwcm9wZXJ0eSdzIHR5cGUuCisKKyAgICAgICAgV2UgbWF4
aW1pemUgdGhlIGxpa2VsaWhvb2Qgb2YgKDEpIGJ5IGhhdmluZyBhIHJpY2ggdHlwZSBzeXN0ZW0u
IEJ1dCBoYXZpbmcgYSByaWNoIHR5cGUgc3lzdGVtIG1lYW5zCisgICAgICAgIHRoYXQgYSByZWZs
ZWN0aXZlIHB1dCB0byBhIHByb3BlcnR5IGhhcyB0byBoYXZlIGEgbGFyZ2Ugc3dpdGNoIG92ZXIg
dGhlIGluZmVycmVkIHR5cGUgdG8gZGVjaWRlIGhvdworICAgICAgICB0byBkbyB0aGUgdHlwZSBj
aGVjay4gVGhhdCdzIHdoeSB3ZSBuZWVkICgzKS4gV2UgZW5zdXJlICgzKSBieSBoYXZpbmcgZXZl
cnkgcmVmbGVjdGl2ZSBwcm9wZXJ0eQorICAgICAgICBzdG9yZSAoaS5lLiBwdXREaXJlY3RJbnRl
cm5hbCBpbiBhbnkgY29udGV4dCB0aGF0IGlzbid0IFB1dEJ5SWQpIGZvcmNlIHRoZSBpbmZlcnJl
ZCB0eXBlIHRvIGJlY29tZQorICAgICAgICBUb3AuIFdlIGRvbid0IHJlYWxseSB3b3JyeSBhYm91
dCBlbnN1cmluZyAoMik7IHRoaXMgaXMgc3RhdGlzdGljYWxseSB0cnVlIGZvciBtb3N0IHByb2dy
YW1zCisgICAgICAgIGFscmVhZHkuCisKKyAgICAgICAgUHJvYmFibHkgdGhlIG1vc3Qgc3VidGxl
IHRyaWNrZXJ5IGdvZXMgaW50byAoNCkuIExvZ2ljYWxseSB3ZSdkIGxpa2UgdG8gc2F5IHRoYXQg
ZWFjaAorICAgICAgICAoU3RydWN0dXJlLCBQcm9wZXJ0eSkgbWFwcyB0byBpdHMgb3duIEluZmVy
cmVkVHlwZS4gSWYgc3RydWN0dXJlIFMxIGhhcyBhIHRyYW5zaXRpb24gZWRnZSB0byBTMiwKKyAg
ICAgICAgdGhlbiB3ZSBjb3VsZCBlbnN1cmUgdGhhdCB0aGUgSW5mZXJyZWRUeXBlIEkxIHdoZXJl
IChTMSwgUHJvcGVydHkpLT5JMSBoYXMgYSBkYXRhIGZsb3cgY29uc3RyYWludAorICAgICAgICB0
byBJMiB3aGVyZSAoUzIsIFByb3BlcnR5KS0+STIuIFRoYXQgd291bGQgd29yaywgYnV0IGl0IHdv
dWxkIGludm9sdmUgYSBsb3Qgb2YgbWVtb3J5LiBBbmQgd2hlbiBJMQorICAgICAgICBnZXRzIGlu
dmFsaWRhdGVkIGluIHNvbWUgd2F5LCBpdCB3b3VsZCBoYXZlIHRvIHRlbGwgSTIgYWJvdXQgaXQs
IGFuZCB0aGVuIEkyIG1pZ2h0IHRlbGwgb3RoZXIKKyAgICAgICAgSW5mZXJyZWRUeXBlIG9iamVj
dHMgZG93bnN0cmVhbS4gVGhhdCdzIG1hZG5lc3MuIFNvLCB0aGUgZmlyc3QgbWFqb3IgY29tcHJv
bWlzZSB0aGF0IHdlIG1ha2UgaGVyZQorICAgICAgICBpcyB0byBzYXkgdGhhdCBpZiBzb21lIHBy
b3BlcnR5IGhhcyBzb21lIEluZmVycmVkVHlwZSBhdCBzb21lIFN0cnVjdHVyZSwgdGhlbiBhbnl0
aW1lIHdlCisgICAgICAgIHRyYW5zaXRpb24gZnJvbSB0aGF0IFN0cnVjdHVyZSwgdGhlIG5ldyBT
dHJ1Y3R1cmUgc2hhcmVzIHRoZSBzYW1lIEluZmVycmVkVHlwZSBmb3IgdGhhdCBwcm9wZXJ0eS4K
KyAgICAgICAgVGhpcyB1bmlmaWVzIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBvdmVyIHRoZSBl
bnRpcmUgdHJhbnNpdGlvbiB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBTdHJ1Y3R1cmUgYXQKKyAgICAg
ICAgd2hpY2ggdGhlIHByb3BlcnR5IHdhcyBhZGRlZC4gQnV0IHRoaXMgd291bGQgc3RpbGwgbWVh
biB0aGF0IGVhY2ggU3RydWN0dXJlIHdvdWxkIGhhdmUgaXRzIG93bgorICAgICAgICBJbmZlcnJl
ZFR5cGVUYWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGF0IGJlY2F1c2UgZXhwZXJpZW5jZSB3aXRoIFBy
b3BlcnR5VGFibGUgc2hvd3MgdGhhdCB0aGlzIGNhbiBiZQorICAgICAgICBhIG1ham9yIG1lbW9y
eSBob2cuIFNvLCB3ZSBkb24ndCBjcmVhdGUgYW4gSW5mZXJyZWRUeXBlVGFibGUgdW50aWwgc29t
ZW9uZSBhZGRzIGEgcHJvcGVydHkgdGhhdCBpcworICAgICAgICBzdWJqZWN0IHRvIHR5cGUgaW5m
ZXJlbmNlIChpLmUuIGl0IHdhcyBhZGRlZCBub24tcmVmbGVjdGl2ZWx5KSwgYW5kIHdlIHNoYXJl
IHRoYXQgSW5mZXJyZWRUeXBlVGFibGUKKyAgICAgICAgd2l0aCB0aGUgZW50aXJlIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIHRyZWUgcm9vdGVkIGF0IHRoZSBTdHJ1Y3R1cmUgdGhhdCBoYWQgdGhlIGZp
cnN0IGluZmVycmVkCisgICAgICAgIHByb3BlcnR5LiBXZSBhbHNvIGRyb3AgdGhlIEluZmVycmVk
VHlwZVRhYmxlIGFueXRpbWUgdGhhdCB3ZSBkbyBhIGRpY3Rpb25hcnkgdHJhbnNpdGlvbiwgYW5k
IHdlCisgICAgICAgIGRvbid0IGFsbG93IGZ1cnRoZXIgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2Ug
aWYgYSBzdHJ1Y3R1cmUgaGFkIGV2ZXIgYmVlbiBhIGRpY3Rpb25hcnkuCisKKyAgICAgICAgVGhp
cyBpcyBhIDMlIHNwZWVkLXVwIG9uIE9jdGFuZSBhbmQgYSAxMiUgc3BlZWQtdXAgb24gS3Jha2Vu
IG9uIG15IHNldHVwLiBJdCdzIG5vdCBhIHNpZ25pZmljYW50CisgICAgICAgIHNsb3ctZG93biBv
biBhbnkgYmVuY2htYXJrIEkgcmFuLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YnJhbmNoVGVzdDY0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmJyYW5jaFRlc3Q2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
Ojp0ZXN0NjQpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1
dEJ5SWRGbGFncy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5oOgorICAgICAgICAoSlNDOjplbmNvZGVTdHJ1Y3R1cmVJ
RCk6CisgICAgICAgIChKU0M6OmRlY29kZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRWYXJpYW50OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkVmFyaWFudDo6cmVxdWlyZWRUeXBlKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEluc3RydWN0aW9uOjpVbmxpbmtlZElu
c3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChK
U0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKEpTQzo6SW5saW5lV2F0
Y2hwb2ludFNldDo6aXNCZWluZ1dhdGNoZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRD
b25zdGFudFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRC
eUlkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlY3RQdXRCeUlk
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjo6ZmlsdGVyQnlWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVy
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6c2V0VHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9y
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdl
T1NSRW50cnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNUeXBl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6
OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENv
bnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRH
ZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmFkZEJhc2VDaGVjayk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6RGVzaXJlZElu
ZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b3Bl
cmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpleHBlY3RlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjphZGQpOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlND
OjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNp
cmVkSW5mZXJyZWRUeXBlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElu
ZmVycmVkVHlwZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRB
ZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hw
b2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRX
YXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dCk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAg
ICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNoZWQpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1NhZmVUb0xv
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpp
bmZlcnJlZFZhbHVlRm9yUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp0cnlH
ZXRDb25zdGFudENsb3N1cmVWYXIpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmluZmVycmVkVHlwZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkZmcvREZH
SW5mZXJyZWRUeXBlQ2hlY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjppbnNlcnRJ
bmZlcnJlZFR5cGVDaGVjayk6CisgICAgICAgICogZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcm9wZXJ0eVR5
cGVLZXkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpQcm9w
ZXJ0eVR5cGVLZXkpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0
b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpzdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6dWlkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVy
dHlUeXBlS2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Omlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVL
ZXk6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpkZWxldGVkVUlEKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVR5cGVPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b25seVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zm9yRWFjaCk6CisgICAgICAgICogZGZnL0RGR1Vz
ZUtpbmQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcv
REZHVXNlS2luZC5oOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAg
ICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZh
bGlkYXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUNoZWNrQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06Om51bWJlck9yTm90Q2VsbFRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNoZWNrSW5mZXJyZWRUeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU1hY2hpbmVJbnQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRl
Y29kZWRDb2RlTWFwRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJ
Zk5vdFR5cGUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTik6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmJyYW5jaElmRXF1YWwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJy
YW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZD
ZWxsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdE90aGVyKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkludDMyKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdEludDMyKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk51bWJlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6YnJhbmNoSWZOb3ROdW1iZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmRW1wdHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5j
aFN0cnVjdHVyZSk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c206CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SW5mZXJyZWRUeXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6Zm9yRmxhZ3MpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnB1dEJ5SWRGbGFncyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvcjo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJl
bW92ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
c3Vic3VtZXMpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAp
OgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZSk6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6Y2FuV2F0Y2gpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmR1bXApOgorICAgICAgICAoSlNDOjpJ
bmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6bWFrZVRvcFNsb3cpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBl
OjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFR5cGVUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpnZXQpOgorICAgICAg
ICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlw
ZVRhYmxlOjpJbmZlcnJlZFR5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRh
YmxlOjp+SW5mZXJyZWRUeXBlVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmdldCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9wcm9wLXR5cGUtb2JqZWN0LXRoZW4tc3RyaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5y
ZXR1cm4uby5mLnRvU3RyaW5nKToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9wcm9wLXR5cGUtc3RyaW5nLXRoZW4tb2JqZWN0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAodG9TdHJpbmcpOgor
CiAyMDE1LTA5LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
MC4wIHNob3VsZCByZWFsbHkgYmUgMC4wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKICAgICBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKyAg
ICBkZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCiAgICAgZGZnL0RGR0luc2VydGlvblNldC5j
cHAKICAgICBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtNDk2LDYgKzQ5Nyw4IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0lkZW50aWZpZXIu
Y3BwCiAgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9JbmZlcnJlZFZh
bHVlLmNwcAorICAgIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcAorICAgIHJ1bnRpbWUvSW5mZXJy
ZWRUeXBlVGFibGUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAg
IHJ1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDI3LDYgKzQyNyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3Jh
cGhTYWZlcG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hl
YXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnNlcnRpb25TZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAiIC8+
CkBAIC03NDUsNiArNzQ2LDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SWRlbnRpZmllci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
ZGV4aW5nVHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
ZmVycmVkVmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmZlcnJlZFR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmZlcnJlZFR5cGVUYWJsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KQEAg
LTExMzIsNiArMTEzNSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1NF
UGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEQ0VQaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkVHJh
bnNpdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVk
V2F0Y2hwb2ludHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaCIgLz4KQEAgLTExNjAsNiArMTE2NCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luZmVycmVkVHlwZUNoZWNrLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5zZXJ0aW9uU2V0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRp
b25QaGFzZS5oIiAvPgpAQCAtMTIxMSw2ICsxMjE2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvcGVydHlUeXBlS2V5Lmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdSZWdpc3RlckJhbmsuaCIgLz4K
QEAgLTE1ODMsNiArMTU4OSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEluZGV4aW5nSGVhZGVySW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ1R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5mZXJyZWRWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbmZlcnJlZFR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSW5mZXJyZWRUeXBlVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbnQxNkFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEludDMyQXJyYXkuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTI1MSw2ICsxMjUxLDkgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAiPgogICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAiPgorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTg1MSw2ICsxODU0LDgg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGlyZWN0QXJndW1lbnRzLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGlyZWN0QXJndW1lbnRz
T2Zmc2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJy
ZWRWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVy
cmVkVHlwZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVy
cmVkVHlwZVRhYmxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
U2NvcGVPZmZzZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxT
Y29wZWRBcmd1bWVudHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxTY29wZWRBcmd1bWVudHNUYWJsZS5jcHAiIC8+CkBAIC0zNjYxLDYgKzM2NjYsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIj4KICAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIj4KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHRGVzaXJlZFRyYW5zaXRpb25zLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTM3MjQsNiArMzczMiw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCI+CiAgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0luZmVycmVkVHlwZUNoZWNrLmgiPgorICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgiPgogICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQ0MDksNiArNDQyMCw5IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCI+CiAg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb3BlcnR5VHlwZUtleS5oIj4KKyAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMRXhpdFByb3BlcnR5VmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDQ1Miw2ICs0NDY2LDggQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY09mZnNldC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVHlwZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFR5cGVUYWJsZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTY29wZU9mZnNldC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTY29wZWRBcmd1bWVudHMuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2NvcGVkQXJndW1lbnRzVGFibGUuaCIgLz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJp
bmVkTGl2ZW5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwNUMzQjIxNjgzQ0Y4RjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjA3
NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDc3NkJEMTRGRjAwMjgwMDEw
MjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi87IH07CisJ
CTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIxMUI5NEJGQTkwMDExMDY2
MCAvKiBJbmZlcnJlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzOTcx
NEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLzsgfTsKIAkJMEYwQjgzOUQxNEJD
RjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVu
a3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBD
b2RlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC01NDYsNiArNTQ4LDggQEAKIAkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4
MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CisJCTBGQzg0MTY4MUJBOEMz
MjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovOyB9OworCQkwRkM4NDE2OTFCQThDMzIxMDA2MTgz
N0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDOTdGMkYxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAgKi87IH07CiAJCTBGQzk3RjM0MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzk3RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkM5N0YzRDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkM5N0YzNzE4MjAyMTE5MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb25QaGFzZS5jcHAgKi87IH07CkBAIC03NDUsNiArNzQ5LDEwIEBACiAJCTBGRkI5
MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyQzE2N0ZFODRC
MDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVE
QiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRo
R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMERBRDAzMEZCMUVC
MUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIElu
ZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5j
cHAgKi87IH07CisJCTBGRkM5MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzky
MTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzkyMTQxQjk0RTgzRTAwNzFE
RDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtl
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzky
MTUxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkM5OUQxMTg0RUM4QUQwMDlD
MTBBQiAvKiBDb25zdGFudE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkZDOTlE
NDE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5OUQyMTg0
RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovOyB9
OwogCQkwRkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5
MTcsNiArMTkyNSw4IEBACiAJCTBGMDQzOTZDMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5l
ZExpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbWJpbmVk
TGl2ZW5lc3MuaDsgcGF0aCA9IGRmZy9ERkdDb21iaW5lZExpdmVuZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMDVDM0IyMTY4M0NGOEYwMEJBRjQ1QiAvKiBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDc3NkJEMTRG
RjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKSVRDb21waWxhdGlvbkVmZm9ydC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAv
KiBJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJy
ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4Mzk3MTRCQ0Y0NUEw
MDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBMTEludFRodW5rcy5jcHA7IHBhdGggPSBsbGludC9MTEludFRodW5rcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4Mzk4MTRCQ0Y0NUEwMDg4NUI0RiAvKiBM
TEludFRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludFRodW5r
cy5oOyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMzg2LDYgKzIzOTYsOCBAQAogCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA5MTQwNDNCRDIw
MENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZDODQxNjYxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0luZmVycmVkVHlwZUNo
ZWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY3MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbmZlcnJl
ZFR5cGVDaGVjay5oOyBwYXRoID0gZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjJGMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGMzAxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDOTdGMzcxODIwMjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHSW52YWxp
ZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNTczLDYgKzI1ODUsMTAgQEAKIAkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBv
bHltb3JwaGljQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHlt
b3JwaGljQWNjZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkI2QzM2MUFG
NDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFR5cGVvZlR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZCNkMzNzFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlb2ZUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRkM5MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGVUYWJsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2
NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmZlcnJlZFR5cGVUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZD
OTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmg7IHBhdGgg
PSBkZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BlcnR5VHlwZUtleS5oOyBwYXRo
ID0gZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkZDOTlEMDE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJp
bmdXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFy
cmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRkM5OUQzMTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlCdWZmZXJO
ZXV0ZXJpbmdXYXRjaHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjUx
LDggKzQ2NjcsOCBAQAogCQkJCUJDMDJFOThCMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3Rh
bmNlLmggKi8sCiAJCQkJQkMwMkU5MDYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBl
LmNwcCAqLywKIAkJCQlCQzAyRTkwNzBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUu
aCAqLywKLQkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi8sCiAJ
CQkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8sCisJCQkJRkUx
QzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCTBGMTJERTBEMTk3
OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCAqLywKIAkJCQkwRjEyREUwRTE5NzlE
NUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovLAogCQkJCTE0MjlEODc3MEVEMjFBQ0Qw
MEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLywKQEAgLTQ2ODYsNiArNDcwMiwxMCBA
QAogCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMu
aCAqLywKIAkJCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAq
LywKIAkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCisJ
CQkJMEYwQTc1MjAxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8sCisJCQkJ
MEYwQTc1MjExQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oICovLAorCQkJCTBGRkM5
MjBGMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgKi8sCisJCQkJMEZG
QzkyMTAxQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggKi8sCiAJCQkJMEZG
OEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovLAogCQkJCTBGRjhC
REU5MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8sCiAJCQkJRTE3ODYzNkMw
RDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLApAQCAtNDczNiwx
MCArNDc1NiwxMCBAQAogCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaCAqLywKIAkJCQlBN0JEQUVDNDE3RjRFQTE0MDBGNjE0MEMgLyogSlNB
cnJheUl0ZXJhdG9yLmNwcCAqLywKIAkJCQlBN0JEQUVDNTE3RjRFQTE0MDBGNjE0MEMgLyogSlNB
cnJheUl0ZXJhdG9yLmggKi8sCi0JCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91
bmRGdW5jdGlvbi5jcHAgKi8sCi0JCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91
bmRGdW5jdGlvbi5oICovLAogCQkJCThCMEY0MjRCMUFCRDZERTIwMDM5MTdFQSAvKiBKU0Fycm93
RnVuY3Rpb24uY3BwICovLAogCQkJCThCMEY0MjRBMUFCRDZEMkYwMDM5MTdFQSAvKiBKU0Fycm93
RnVuY3Rpb24uaCAqLywKKwkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1
bmN0aW9uLmNwcCAqLywKKwkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1
bmN0aW9uLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNw
cCAqLywKIAkJCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCAqLywKIAkJ
CQlCQzdGOEZCQTBFMTlEMUVGMDA4NjMyQzAgLyogSlNDZWxsLmNwcCAqLywKQEAgLTUwNDMsOSAr
NTA2Myw5IEBACiAJCQkJMEZFMDUwMjQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oICov
LAogCQkJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCiAJCQkJRTE4RTNB
NTYwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmggKi8sCi0JCQkJRkU5MEJCM0ExQjdDRjY0RTAwNkIz
RjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBW
TUVudHJ5U2NvcGUuY3BwICovLAogCQkJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuaCAqLywKKwkJCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVz
LmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywK
IAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLywKIAkJCQkxNEJG
Q0U2ODEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggKi8sCkBAIC01MTk3LDYgKzUyMTcs
NyBAQAogCQkJCTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAog
CQkJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3Bw
ICovLAogCQkJCTBGOEYyQjk4MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmll
cnMuaCAqLywKKwkJCQkwRkZDOTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVy
cmVkVHlwZS5oICovLAogCQkJCUMyQzBGN0NCMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVk
VHJhbnNpdGlvbnMuY3BwICovLAogCQkJCUMyQzBGN0NDMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdE
ZXNpcmVkVHJhbnNpdGlvbnMuaCAqLywKIAkJCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLywKQEAgLTUyNDEsNiArNTI2Miw4IEBACiAJCQkJ
MEYyRkNDRjMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmggKi8sCiAJCQkJ
MEZCMTc2NUMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgKi8sCiAJCQkJ
MEZCMTc2NUQxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5oICovLAorCQkJCTBG
Qzg0MTY2MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgKi8sCisJ
CQkJMEZDODQxNjcxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmggKi8s
CiAJCQkJMEZCMTRFMjAxODEyNTcwQjAwOUI2QjREIC8qIERGR0lubGluZUNhY2hlV3JhcHBlci5o
ICovLAogCQkJCTBGQjE0RTIyMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBw
ZXJJbmxpbmVzLmggKi8sCiAJCQkJQTcwNEQ5MDAxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcCAqLywKQEAgLTUyNzMsMTAgKzUyOTYsMTAgQEAKIAkJCQkwRkI0
QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQlBNzY3
QjVCMzE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3Bw
ICovLAogCQkJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5oICovLAotCQkJCTBGNTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlF
eGl0LmNwcCAqLywKLQkJCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5o
ICovLAogCQkJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5jcHAgKi8sCiAJCQkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8sCisJCQkJMEY1ODc0RUIxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuY3BwICovLAorCQkJCTBGNTg3NEVDMTk0RkVCMTIwMEFBQjJDMSAv
KiBERkdNYXlFeGl0LmggKi8sCiAJCQkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01p
bmlmaWVkR3JhcGguY3BwICovLAogCQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdN
aW5pZmllZEdyYXBoLmggKi8sCiAJCQkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01p
bmlmaWVkSUQuaCAqLywKQEAgLTUzNDQsNiArNTM2Nyw3IEBACiAJCQkJMEYzRTAxQTkxOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLywKIAkJCQkwRjJCOUNFMDE5RDBC
QTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwICovLAogCQkJCTBGMkI5
Q0UxMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oICovLAorCQkJ
CTBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCAqLywKIAkJ
CQkwRkIxNzY1RTE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKIAkJCQkw
RkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCiAJCQkJMEYzQTFC
RjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLywKQEAg
LTU5MzQsNiArNTk1OCw3IEBACiAJCQkJRkU1MDY4NjUxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVy
cmVkU291cmNlRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ0MkNCMjUxQTZDREI4QzAwNUQz
RDdDIC8qIEpTSW5wdXRzLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlGRTFDMEZGRDFCMTkzRTk4
MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZDOTIxNDFCOTRF
ODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1By
b2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyog
QmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTYwNDcsNiArNjA3Miw3IEBA
CiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdCMDI0NzU5MUI4NjhFQjcwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50YXhD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RDE0QkU3MjdBMDBBREM2NEIgLyog
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwQTc1MjMxQjk0
QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgz
QTcxNEJDRjUwNzAwODg1QjRGIC8qIENvZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTYzMjYsMTIgKzYzNTIsMTQgQEAKIAkJCQkwRjI1RjFCNDE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlE
MzM5QjE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3RhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQzg0MTY5MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdGQ0MyNkQxN0EwQjZBQTAwNzg2RDFBIC8qIEZUTFN3aXRjaENh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkUyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExU
aHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBG
VExUeXBlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0
NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RB
NTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkZDOTIxMjFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3OUEgLyogRlRMV2Vp
Z2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRM
V2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5Nyw2ICs2NTI1LDcgQEAKIAkJ
CQlCQzE4QzQxRjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcyMDI4QkExNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25JbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM5MjE2MUI5NEZCM0UwMDcxREQ2
NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNzQzOSw2ICs3NDY4LDcgQEAKIAkJCQkxNDI4MDgyRTEwN0VDMDU3
MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNG
MTE4OTFCNUI0MDAzMUM3RkEgLyogQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlw
ZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQUNFNjNDMThDQTVBMDMwMEVEMDE5MSAv
KiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2
MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2
NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4
MTksNiArNzg0OSw3IEBACiAJCQkJMEZGMDU0RjkxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0aW9uRnV6ei5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQTE2N0JBQkVF
MDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFENENG
NzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzg0
MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5MUY2MDBCQUY1OUMgLyog
SlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2MDA0MjdB
NDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4NTMsNiAr
Nzg4NCw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDc0MUI4NDIxQzAwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5
QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTRBRTA4MTc5NzNCMjYwMDU2MTJCMSAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUI2QTc0RDE4
QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTg1Myw2ICsxODUzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEp1bXAobWFrZUJyYW5j
aChjb25kKSk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tNjQgbWFzaykKKyAgICB7CisgICAgICAg
IG1vdmUobWFzaywgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCByZWcsIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CiAgICAgICAgIGxvYWQ2NChh
ZGRyZXNzLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDUs
NiArNjA1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakND
KHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJl
c3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTY0IG1hc2spCisg
ICAgeworICAgICAgICBtb3ZlKG1hc2ssIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVy
biBicmFuY2hUZXN0NjQoY29uZCwgcmVnLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgIH0KKwogICAg
IHZvaWQgdGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3Rl
ZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChtYXNrLm1f
dmFsdWUgPT0gLTEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5MSw2ICs2OTEsMTUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NH
ZW5lcmF0aQogICAgIH0KIAogICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkp
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJI
YXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90
VHlwZSgKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5k
ZXNjcmlwdG9yKCksIENDYWxsSGVscGVyczo6RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUg
dHlwZS5cbiIpOworICAgICAgICAKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0
KSkgewogICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVS
ZWdzLApAQCAtNzE0LDYgKzcyMywxNSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vz
c0dlbmVyYXRpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXN0cnVjdHVyZSgpLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKTsKIAorICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gbmV3
U3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5
cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRj
aC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSgKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCksIEND
YWxsSGVscGVyczo6RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUgdHlwZS5cbiIpOworICAg
ICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRS
ZWdpc3RlcnMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRG
bGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRGbGFncy5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CkBAIC0zNSwxNiArMzYsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHV0QnlJZEZs
YWdzIGZsYWdzKSB7Ci0gICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OwogICAgIENvbW1h
UHJpbnRlciBjb21tYSgifCIpOwogICAgIGlmIChmbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkKLSAg
ICAgICAgc3RyaW5nT3V0LnByaW50KGNvbW1hLCAiSXNEaXJlY3QiKTsKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiSXNEaXJlY3QiKTsKIAotICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0
LnRvQ1N0cmluZygpOwotICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQotICAgICAgICBvdXQucHJp
bnQoIk5vbmUiKTsKLSAgICBlbHNlCi0gICAgICAgIG91dC5wcmludChzdHJpbmcpOworICAgIElu
ZmVycmVkVHlwZTo6S2luZCBraW5kID0gSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoZmxhZ3Mp
OworICAgIG91dC5wcmludChjb21tYSwga2luZCk7CisgICAgaWYgKEluZmVycmVkVHlwZTo6aGFz
U3RydWN0dXJlKGtpbmQpKQorICAgICAgICBvdXQucHJpbnQoIjoiLCBiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4oZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRGbGFncy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3Mu
aAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsNzAgQEAKICNpZm5kZWYg
UHV0QnlJZEZsYWdzX2gKICNkZWZpbmUgUHV0QnlJZEZsYWdzX2gKIAorI2luY2x1ZGUgIlN0cnVj
dHVyZUlEVGFibGUuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0gUHV0QnlJZEZsYWdzIHsK
K2VudW0gUHV0QnlJZEZsYWdzIDogaW50cHRyX3QgewogICAgIFB1dEJ5SWROb25lID0gMCwKLSAg
ICBQdXRCeUlkSXNEaXJlY3QgPSAxCisKKyAgICAvLyBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQg
dGhlIHB1dF9ieV9pZCBpcyBkaXJlY3QuIFRoYXQgbWVhbnMgdGhhdCB3ZSBzdG9yZSB0aGUgcHJv
cGVydHkgd2l0aG91dAorICAgIC8vIGNoZWNraW5nIGlmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFz
IGEgc2V0dGVyLgorICAgIFB1dEJ5SWRJc0RpcmVjdCA9IDB4MSwKKyAgICBQdXRCeUlkUGVyc2lz
dGVudEZsYWdzTWFzayA9IDB4MSwKKworICAgIC8vIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVz
dCBiZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBMb3dMZXZlbEludGVycHJldGVyLmFzbS4KKwor
ICAgIC8vIERldGVybWluaW5nIHRoZSByZXF1aXJlZCBpbmZlcnJlZCB0eXBlIGludm9sdmVzIGZp
cnN0IGNoZWNraW5nIHRoZSBwcmltYXJ5IHR5cGUgbWFzaywgYW5kIHRoZW4KKyAgICAvLyB1c2lu
ZyB0aGF0IHRvIGZpZ3VyZSBvdXQgdGhlIG1lYW5pbmcgb2YgdGhlIHNlY29uZGFyeSBtYXNrOgor
ICAgIC8vIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7CisgICAgLy8g
Y2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6CisgICAgLy8gICAgIHN3aXRjaCAoZmxh
Z3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAvLyAgICAgLi4uCisgICAgLy8g
ICAgIH0KKyAgICAvLyAgICAgYnJlYWs7CisgICAgLy8gY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVP
YmplY3RXaXRoU3RydWN0dXJlOgorICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0
V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgLy8gICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
ID0gZGVjb2RlU3RydWN0dXJlSUQoZmxhZ3MpOworICAgIC8vICAgICBicmVhazsKKyAgICAvLyB9
CisgICAgUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9IDB4NiwKKyAgICBQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgPSAweDAsIC8vIE5lZWQgdG8gY2hlY2sgdGhlIHNlY29uZGFyeSB0eXBlIG1h
c2sgZm9yIHRoZSB0eXBlLgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1
cmUgPSAweDIsIC8vIFNlY29uZGFyeSB0eXBlIGhhcyBzdHJ1Y3R1cmUgSUQuCisgICAgUHV0QnlJ
ZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQsIC8vIFNlY29uZGFy
eSB0eXBlIGhhcyBzdHJ1Y3R1cmUgSUQuCisKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2sg
PSAtMHg4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgwLAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiA9IDB4OCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90
aGVyID0gMHgxMCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciA9IDB4MjAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVTdHJpbmcgPSAweDI4LAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMCwK
KyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdE9yT3RoZXIgPSAweDM4LAorICAgIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlVG9wID0gMHg0MAogfTsKIAoraW5saW5lIFB1dEJ5SWRGbGFncyBlbmNv
ZGVTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmVJRCBpZCkKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFn
cz4oaWQpIDw8IDMpOworI2Vsc2UKKyAgICBQdXRCeUlkRmxhZ3MgcmVzdWx0ID0gYml0d2lzZV9j
YXN0PFB1dEJ5SWRGbGFncz4oaWQpOworICAgIEFTU0VSVCghKHJlc3VsdCAmIH5QdXRCeUlkU2Vj
b25kYXJ5VHlwZU1hc2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKK2lubGlu
ZSBTdHJ1Y3R1cmVJRCBkZWNvZGVTdHJ1Y3R1cmVJRChQdXRCeUlkRmxhZ3MgZmxhZ3MpCit7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlSUQ+KGZs
YWdzID4+IDMpOworI2Vsc2UKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0cnVjdHVyZUlEPihm
bGFncyAmIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTg5OTI5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZyb20KICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAgICAgCi0gICAgICAg
IHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3Ry
dWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgIH0KIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5l
d1N0cnVjdHVyZUlEKTsKQEAgLTEwMyw3ICsxMDMsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFu
c2l0aW9uKHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICBzdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQsIG5ld1N0cnVjdHVyZS0+aW5mZXJy
ZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKIH0KIAogUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG1h
cCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTE2
Miw3ICsxNjMsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAg
ICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewog
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgb2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpAQCAtMTkzLDcg
KzE5NCw4IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsK
LSAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVy
ZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTIwNiw3ICsyMDgsOCBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUpOwogICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKLSAgICAgICAgICAg
ICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRp
dGlvblNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLnN0cnVjdHVyZSgp
LCBhY2Nlc3MubmV3U3RydWN0dXJlKCksIGNvbmRpdGlvblNldCwgb2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmluZmVycmVkVHlwZURlc2NyaXB0b3JG
b3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCkBAIC0zMjksOCArMzMyLDEwIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMg
YWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCisKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlh
bnQgPQorICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwg
b2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlkKSk7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KQEAgLTM1NiwxMyArMzYxLDE2IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgfQogICAgIAogICAgICAgICAvLyBXZSBv
bmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJh
bnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJl
bnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0KKyAgICAgICAgICAgIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsK
ICAgICAgICAgaWYgKCF0cmFuc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KAot
ICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0
aW9uLCBjb25kaXRpb25TZXQsIG9mZnNldCkpOworICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjb25k
aXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5pbmZlcnJlZFR5
cGVEZXNjcmlwdG9yRm9yKHVpZCkpKTsKICAgICAgICAgaWYgKCFkaWRBcHBlbmQpCiAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgUHV0QnlJZFZh
cmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fbmV3U3RydWN0dXJlID0gb3Ro
ZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25kaXRpb25TZXQgPSBvdGhlci5tX2NvbmRpdGlv
blNldDsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAgIG1fcmVxdWlyZWRUeXBl
ID0gb3RoZXIubV9yZXF1aXJlZFR5cGU7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMp
CiAgICAgICAgIG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3Rh
dHVzPigqb3RoZXIubV9jYWxsTGlua1N0YXR1cyk7CiAgICAgZWxzZQpAQCAtNTIsMTggKzUzLDIx
IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKLVB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitQdXRCeUlk
VmFyaWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3ImIHJlcXVpcmVkVHlwZSkKIHsKICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CiAg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlcGxhY2U7CiAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0g
c3RydWN0dXJlOwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICByZXN1bHQubV9y
ZXF1aXJlZFR5cGUgPSByZXF1aXJlZFR5cGU7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHV0
QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yJiByZXF1aXJlZFR5cGUpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAg
IHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOwpAQCAtNzEsNiArNzUsNyBAQCBQdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJl
ID0gbmV3U3RydWN0dXJlOwogICAgIHJlc3VsdC5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRU
eXBlID0gcmVxdWlyZWRUeXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg1LDYgKzkw
LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICByZXN1bHQu
bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OwogICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gV1RGOjptb3ZlKGNhbGxMaW5rU3Rh
dHVzKTsKKyAgICByZXN1bHQubV9yZXF1aXJlZFR5cGUgPSBJbmZlcnJlZFR5cGU6OlRvcDsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMzQsOSArMTQwLDEyIEBAIGJvb2wgUHV0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKIHsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIu
bV9vZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3JlcXVpcmVkVHlw
ZSAhPSBvdGhlci5tX3JlcXVpcmVkVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBSZXBsYWNlOgorICAgIGNhc2UgUmVwbGFj
ZTogewogICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNlIFJlcGxh
Y2U6IHsKICAgICAgICAgICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpOwpAQCAt
MTU4LDYgKzE2Nyw3IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQor
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBUcmFuc2l0aW9uOgogICAgICAgICBzd2l0Y2ggKG90
aGVyLm1fa2luZCkgewpAQCAtMjEwLDE0ICsyMjAsMTUgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6
ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICAKICAgICBjYXNlIFJlcGxhY2U6CiAgICAgICAg
IG91dC5wcmludCgKLSAgICAgICAgICAgICI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVy
ZSgpLCBjb250ZXh0KSwgIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgICAg
ICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNl
dCA9ICIsIG9mZnNldCgpLCAiLCAiLCByZXF1aXJlZFR5cGUoKSwKKyAgICAgICAgICAgICI+Iik7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBUcmFuc2l0aW9uOgogICAgICAg
ICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRT
dHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5D
b250ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNv
bnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCks
ICI+Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAi
XSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsIHJlcXVpcmVkVHlwZSgpLCAiPiIpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgU2V0dGVyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE4
OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTEgQEAgcHVibGljOgogICAgIFB1dEJ5SWRW
YXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50Jik7CiAgICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJh
dG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYpOwogCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50
IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNvbnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zm
c2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJy
ZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNl
dHRlcigKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwKQEAgLTk5LDYgKzk5LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOwogICAgIH0KIAorICAgIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciByZXF1aXJlZFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcmVxdWlyZWRUeXBlOworICAgIH0KKwogICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNv
bnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtl
c0NhbGxzKCkgY29uc3Q7CkBAIC0xMzAsNiArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1
cmUqIG1fbmV3U3RydWN0dXJlOwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29u
ZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciBtX3JlcXVpcmVkVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlBhcnNlck1vZGVzLmgiCi0jaW5jbHVk
ZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5jbHVkZSAiU3BlY2lh
bFBvaW50ZXIuaCIKICNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIgpAQCAt
OTgsMTIgKzk3LDEwIEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtl
ZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlv
bihPcGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZElu
c3RydWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KLSAgICBVbmxp
bmtlZEluc3RydWN0aW9uKFB1dEJ5SWRGbGFncyBmbGFncykgeyB1LnB1dEJ5SWRGbGFncyA9IGZs
YWdzOyB9CiAgICAgdW5pb24gewogICAgICAgICBPcGNvZGVJRCBvcGNvZGU7CiAgICAgICAgIGlu
dDMyX3Qgb3BlcmFuZDsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIFB1dEJ5SWRG
bGFncyBwdXRCeUlkRmxhZ3M7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNyArMzM2LDM5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0Zp
cmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQotICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBh
bnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2libGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBp
bmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtlOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWlu
Z1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1
cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNvdWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcu
aXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAv
LyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOwor
ICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRoZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQs
IGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxsKCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZl
CisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4gYSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNl
LCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAv
LyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkgY2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVu
IGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUgREZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRp
b24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBCdXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBv
ZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQgb3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0
aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRvaW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNC
ZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRo
ZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJl
dHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAgLy8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMg
dG8gd29yayBhcm91bmQgdGhpczoKKyAgICAvLworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0
aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hlY2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRo
YXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAgLy8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQg
ZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAgIC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRo
ZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZHIGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3
YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisgICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0
aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGlsbCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBp
bnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5nV2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODk5MjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjExNCw3ICsyMTE0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRQdXRCeQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8g
b2Zmc2V0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBuZXcgc3RydWN0dXJlCiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBzdHJ1Y3R1cmUgY2hhaW4KLSAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoUHV0QnlJZE5vbmUpOyAvLyBpcyBub3QgZGlyZWN0CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHN0YXRpY19jYXN0PGludD4oUHV0QnlJZE5vbmUpKTsgLy8gaXMg
bm90IGRpcmVjdAogCiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtMjEzNiw3ICsyMTM2LDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlYwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsgLy8gb2Zmc2V0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAv
LyBuZXcgc3RydWN0dXJlCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBzdHJ1Y3R1
cmUgY2hhaW4gKHVudXNlZCBpZiBkaXJlY3QpCi0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKChw
dXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QgfHwgcHJvcGVydHkgIT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSA/IFB1dEJ5SWRJc0RpcmVjdCA6IFB1dEJ5
SWROb25lKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PigocHV0
VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0IHx8IHByb3BlcnR5ICE9IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgPyBQdXRCeUlkSXNEaXJlY3QgOiBQdXRCeUlk
Tm9uZSkpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDE4OTky
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOSArMTE2LDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQgbm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQp
CisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoVCBub2RlLCBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2RlKG5vZGUpLCBzZXQpOworICAgICAgICByZXR1cm4g
ZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCwgYWRtaXR0ZWRUeXBlcyk7CiAgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xMzksNyArMTM5LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZmlsdGVyQnlWYWx1ZShmb3JOb2RlKG5vZGUpLCB2YWx1ZSk7CiAgICAgfQog
ICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVl
JiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNw
ZWNOb25lKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9kZXMoQWJzdHJhY3RW
YWx1ZSYsIEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0
VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZh
bHVlKEFic3RyYWN0VmFsdWUmLCBGcm96ZW5WYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjksMTAgKzE4Mjks
MTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZh
bHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0
dXJlLmlzRmluaXRlKCkKICAgICAgICAgICAgICYmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpKSB7Ci0gICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAg
ICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigp
XTsKKyAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcih2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwgdWlkKTsKICAgICAgICAgICAgIGlmIChz
dGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0
aGUgcmVzdWx0IGlzIGdvaW5nIHRvIGJlIC0gaXMgaXQgVE9QLCBhIGNvbnN0YW50LCBvciBtYXli
ZQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8KQEAgLTE4NDEsMjIg
KzE4NDEsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIHRoaW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRo
YXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYgaXQgZGlkLCB3ZSdkCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3RhdHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHko
KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNv
bnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29u
c3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwotICAgICAgICAgICAgICAgICAgICB0aGlzUmVz
dWx0LnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6
ZShjb25zdGFudFJlc3VsdCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVj
dHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRo
aXNSZXN1bHQpOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCB1aWQsIHN0YXR1c1tpXS5vZmZzZXQoKSwgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSB8fCBpc0ZUTChtX2dyYXBo
Lm1fcGxhbi5tb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xODgwLDcgKzE4NzAsNiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgog
CiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAg
ICAgIApAQCAtMTg4OCwxMiArMTg3NywyNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0
aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCiAgICAg
ICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkgZG9uJ3QuCiAgICAgICAgIAotICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgIGlm
ICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGFkbWl0
dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVz
ZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRU
eXBlcyA9IFNwZWNPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQp
OworICAgICAgICAKKyAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjA4NCwxMyArMjA4NSwyOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3JhcGgu
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZz
ZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEuaWRl
bnRpZmllck51bWJlcl07CisKKyAgICAgICAgLy8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMgdGhh
dCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5nIHRo
ZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gcmlnaHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90IG9w
dGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1heSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAodXN1
YWxseQorICAgICAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkgQ1NF
IGZvciBleGFtcGxlKSB0aGF0IG9ic2N1cmVzIEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJlCisg
ICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVyZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHks
IHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBoYXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAgICAg
Ly8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29kZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4KKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5vZmZz
ZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworCisgICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0aCBp
cyBiZXR0ZXIuCisgICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAgICAg
ICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3JhcGgsIGRhdGEuaW5mZXJyZWRUeXBlLCBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGcm9t
UGFyc2luZyk7CisKKyAgICAgICAgLy8gSWYgd2UgZGVjaWRlIHRoYXQgdGhlcmUgZG9lcyBub3Qg
ZXhpc3QgYW55IHZhbHVlIHRoYXQgdGhpcyBjYW4gcmV0dXJuLCB0aGVuIGl0J3MgcHJvYmFibHkK
KyAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcGlsYXRpb24gd2FzIGFscmVhZHkgaW52YWxpZGF0
ZWQuCisgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNl
dElzVmFsaWQoZmFsc2UpOworCisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAg
ICAgaWYgKHZhbHVlLm1fdmFsdWUpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEyMCw2ICsy
MTM3LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAvLyBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qgb24gY29tcGlsZSB0aW1lcywgYnV0IHRoaXMgbm9k
ZSBpcyBGVEwtb25seS4KICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
ICAgICAgICAgCisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50
aWZpZXJzKClbbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyXTsK
KwogICAgICAgICBBYnN0cmFjdFZhbHVlIGJhc2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVz
dWx0OwpAQCAtMjEyOSwxOCArMjE0OCwyOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGdldENhc2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zm
c2V0TWV0aG9kOjpDb25zdGFudCkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRv
cCgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzd2l0Y2ggKGdl
dENhc2UubWV0aG9kKCkua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpDb25zdGFudDogeworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3Vs
dDsKKyAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwKKyAgICAgICAgICAgICAgICAgICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBYnN0
cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLAotICAgICAgICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNv
bnN0YW50KCksCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
KSk7Ci0gICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
bWVyZ2UoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCB1aWQsIG1fc3RhdGUuc3RydWN0dXJl
Q2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVh
cFRvcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VT
dHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkgPT0gQ29udHJhZGljdGlvbikKQEAgLTIxNjMsNiAr
MjE5Myw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIEFi
c3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdWYWx1ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBAIC0yMTcwLDYgKzIyMDIs
MTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAgICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKKyAgICAgICAgICAgIHRoaXNWYWx1ZS5maWx0
ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRp
bmdWYWx1ZS5tZXJnZSh0aGlzVmFsdWUpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAg
ICAgICAgICBpZiAodGhpc1NldC5vbmx5U3RydWN0dXJlKCkgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSkgewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0yMTg1
LDYgKzIyMjIsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAg
ICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBo
LCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24pCiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFs
aWQoZmFsc2UpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSA9IHJlc3VsdGluZ1Zh
bHVlOworICAgICAgICBpZiAoISFvcmlnaW5hbFZhbHVlICYmICFyZXN1bHRpbmdWYWx1ZSkKKyAg
ICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yMjY0LDEzICsyMzA0LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1
dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYm
ICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIGlmICh2YWx1ZS5t
X3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1
cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2
YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZp
ZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5v
cCgpID09IFB1dEJ5SWREaXJlY3QpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChz
dGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7
CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKQEAgLTI2MTUs
OSArMjY1NSw5IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAog
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXIoCi0gICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0
ZWRUeXBlcykKIHsKLSAgICBpZiAodmFsdWUuZmlsdGVyKG1fZ3JhcGgsIHNldCkgPT0gRmlsdHJh
dGlvbk9LKQorICAgIGlmICh2YWx1ZS5maWx0ZXIobV9ncmFwaCwgc2V0LCBhZG1pdHRlZFR5cGVz
KSA9PSBGaWx0cmF0aW9uT0spCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgbV9z
dGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICByZXR1cm4gQ29udHJhZGljdGlvbjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw1NiBAQCB2b2lkIEFic3RyYWN0
VmFsdWU6OnNldFR5cGUoR3JhcGgmIGdyYXBoCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQog
Cit2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2lu
ZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAg
ICBzZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgc2V0VHlwZShTcGVjT3RoZXIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBzZXRUeXBlKFNwZWNJ
bnQzMik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgor
ICAgICAgICBzZXRUeXBlKFNwZWNCeXRlY29kZU51bWJlcik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBzZXQoZ3JhcGgsIGdyYXBoLm1f
dm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzZXQoZ3JhcGgsIGRlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBzZXQoZ3JhcGgsIGRlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAgICBtZXJnZShTcGVjT3RoZXIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKKyAgICAgICAgc2V0VHlwZShn
cmFwaCwgU3BlY09iamVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc2V0VHlwZShncmFwaCwgU3BlY09iamVjdCB8IFNw
ZWNPdGhlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgor
ICAgICAgICBtYWtlSGVhcFRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQo
CisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgc2V0KGdy
YXBoLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVyZXNBcmVD
bG9iYmVyZWQpCisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7Cit9CisKIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKEdyYXBoJiBncmFwaCwgTm9kZUZsYWdz
IHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2RlKQogewogICAgIGlmIChyZXByZXNlbnRhdGlvbiA9
PSBOb2RlUmVzdWx0RG91YmxlKSB7CkBAIC0xODksOCArMjM5LDIyIEBAIGJvb2wgQWJzdHJhY3RW
YWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcKICAgICByZXR1cm4gb2xkTWUgIT0gKnRoaXM7CiB9
CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEdyYXBoJiBncmFwaCwg
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK2Jvb2wgQWJzdHJhY3RWYWx1ZTo6aXNUeXBlKEdy
YXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUp
IGNvbnN0CiB7CisgICAgQWJzdHJhY3RWYWx1ZSB0eXBlVmFsdWU7CisgICAgdHlwZVZhbHVlLnNl
dChncmFwaCwgaW5mZXJyZWRUeXBlKTsKKworICAgIEFic3RyYWN0VmFsdWUgbWVyZ2VkVmFsdWUg
PSAqdGhpczsKKyAgICBtZXJnZWRWYWx1ZS5tZXJnZSh0eXBlVmFsdWUpOworCisgICAgcmV0dXJu
IG1lcmdlZFZhbHVlID09IHR5cGVWYWx1ZTsKK30KKworRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFj
dFZhbHVlOjpmaWx0ZXIoCisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRlZFR5cGVzKQoreworICAgIEFTU0VSVCghKGFkbWl0
dGVkVHlwZXMgJiBTcGVjQ2VsbCkpOworICAgIAogICAgIGlmIChpc0NsZWFyKCkpCiAgICAgICAg
IHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgCkBAIC0xOTgsNyArMjYyLDcgQEAgRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVz
LCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCiAgICAgCi0gICAgbV90eXBlICY9IG90
aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3R5cGUgJj0gb3RoZXIuc3Bl
Y3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIHwgYWRtaXR0ZWRUeXBlczsKICAgICBtX2FycmF5TW9k
ZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9zdHJ1Y3R1cmUu
ZmlsdGVyKG90aGVyKTsKICAgICAKQEAgLTMxNSw2ICszNzksMTMgQEAgRmlsdHJhdGlvblJlc3Vs
dCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoYwogICAgIHJldHVybiBDb250cmFkaWN0aW9uOwogfQog
CitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBBYnN0cmFj
dFZhbHVlIGZpbHRlclZhbHVlOworICAgIGZpbHRlclZhbHVlLnNldChncmFwaCwgZGVzY3JpcHRv
cik7CisgICAgcmV0dXJuIGZpbHRlcihmaWx0ZXJWYWx1ZSk7Cit9CisKIHZvaWQgQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQogewogICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIs
IGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVu
ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
CShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRG
R05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNp
bmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5
cGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgog
I2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBAIC0yMTQsNyArMjE1LDEwIEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworCiAgICAg
dm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlRmxhZ3MgcmVwcmVzZW50
YXRpb24sIE5vZGUqID0gbnVsbHB0cik7CiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRp
b24oR3JhcGgmLCBOb2RlKik7CiAgICAgCkBAIC0yODAsMTcgKzI4NCwyNyBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5
cGUpOwogICAgIH0KKworICAgIGJvb2wgaXNUeXBlKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAgICAvLyBGaWx0ZXJzIHRoZSB2YWx1ZSB1c2luZyB0
aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gSWYgdGhlIGFkbWl0dGVkVHlwZXMgYXJndW1lbnQgaXMg
bm90IHBhc3NlZCwgdGhpcworICAgIC8vIGltcGxpY2l0bHkgZmlsdGVycyBieSB0aGUgdHlwZXMg
aW1wbGllZCBieSB0aGUgc3RydWN0dXJlIHNldCwgd2hpY2ggYXJlIHVzdWFsbHkgYSBzdWJzZXQg
b2YKKyAgICAvLyBTcGVjQ2VsbC4gSGVuY2UsIGFmdGVyIHRoaXMgY2FsbCwgdGhlIHZhbHVlIHdp
bGwgbm8gbG9uZ2VyIGhhdmUgYW55IG5vbi1jZWxsIG1lbWJlcnMuIEJ1dCwgeW91IGNhbgorICAg
IC8vIHVzZSBhZG1pdHRlZFR5cGVzIHRvIHByZXNlcnZlIHNvbWUgbm9uLWNlbGwgdHlwZXMuIE5v
dGUgdGhhdCBpdCdzIHdyb25nIGZvciBhZG1pdHRlZFR5cGVzIHRvIG92ZXJsYXAKKyAgICAvLyB3
aXRoIFNwZWNDZWxsLgorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3Qg
U3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKTsK
ICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVy
ZVNldCYpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVz
KTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSk7CiAg
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoY29uc3QgQWJzdHJhY3RWYWx1ZSYpOworCisgICAg
RmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3ImKTsKICAgICAKICAgICBGaWx0cmF0aW9uUmVzdWx0IGNoYW5nZVN0cnVjdHVyZShHcmFw
aCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAogICAgIGJvb2wgY29udGFpbnMoU3RydWN0
dXJlKikgY29uc3Q7Ci0gICAgCisKICAgICBib29sIHZhbGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoaXNIZWFwVG9wKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg5OTI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwNiw5ICsyMDYsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxl
VHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9u
KiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5
cGVkQXJyYXlUeXBlLCBjb25zdCBDaGVja3NGdW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKLSAgICBO
b2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0
KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
cm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBHZXRCeU9mZnNldCk7Ci0gICAgTm9kZSogaGFuZGxl
R2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhh
bmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5
T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBOb2RlKiB2YWx1ZSk7Cisg
ICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImLCBOb2RlVHlwZSA9IEdldEJ5T2Zmc2V0KTsKIAogICAgIC8vIENyZWF0
ZSBhIHByZXNlbmNlIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGJhc2VkIG9uIHNvbWUga25vd24g
b2Zmc2V0IGFuZCBzdHJ1Y3R1cmUgc2V0LiBEb2VzIG5vdAogICAgIC8vIGNoZWNrIHRoZSB2YWxp
ZGl0eSBvZiB0aGUgY29uZGl0aW9uLCBidXQgaXQgbWF5IHJldHVybiBhIG51bGwgb25lIGlmIGl0
IGVuY291bnRlcnMgYSBjb250cmFkaWN0aW9uLgpAQCAtMjMwNyw3ICsyMzA2LDkgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlPZmZzZXQoCisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAg
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlLCBOb2RlVHlwZSBv
cCkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KG9mZnNldCkpCkBAIC0yMzE4LDEzICsyMzE5LDE3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAg
ICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgZGF0YS0+
aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOworICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJl
ZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAKICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRv
R3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3Jh
Z2UsIGJhc2UpOwogCiAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmll
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlLAorICAgIE5vZGUqIHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzUsNiArMjM0
MCw4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9y
YWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsK
ICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXI7CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOworICAg
IG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAKICAgICBO
b2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIHByb3Bl
cnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgIApAQCAtMjQ0OSw3ICsyNDU2LDggQEAgTm9k
ZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3RhbnQoKSkpOwogICAgIGNhc2UgR2V0QnlPZmZzZXRN
ZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRk
VG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obWV0aG9kLnByb3RvdHlwZSgpKSk7Ci0gICAgICAg
IHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmll
ck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBvcCk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRC
eU9mZnNldCgKKyAgICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVt
YmVyLCBtZXRob2Qub2Zmc2V0KCksIEluZmVycmVkVHlwZTo6VG9wLCBvcCk7CiAgICAgfQogICAg
IGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CiAgICAgICAgIC8vIFdpbGwgbmV2ZXIgc2Vl
IHRoaXMgZnJvbSBwbGFuTG9hZCgpLgpAQCAtMjU1NSwxMyArMjU2MywxMyBAQCBOb2RlKiBCeXRl
Q29kZVBhcnNlcjo6bG9hZCgKICAgICAKICAgICBib29sIG5lZWRTdHJ1Y3R1cmVDaGVjayA9IHRy
dWU7CiAgICAgCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKyAgICAKICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFz
ZSA9IGJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNPYmplY3QqPigpKSB7CiAgICAgICAgIC8v
IFRyeSB0byBvcHRpbWl6ZSBhd2F5IHRoZSBzdHJ1Y3R1cmUgY2hlY2suIE5vdGUgdGhhdCBpdCdz
IG5vdCB3b3J0aCBkb2luZyBhbnl0aGluZyBhYm91dCB0aGlzCiAgICAgICAgIC8vIGlmIHRoZSBi
YXNlJ3Mgc3RydWN0dXJlIGlzIHdhdGNoZWQuCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYmFzZS0+Y29uc3RhbnQoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgIGlmICghc3RydWN0dXJl
LT5kZmdTaG91bGRXYXRjaCgpKSB7Ci0gICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
ID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoIXZhcmlhbnQuY29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIGxvYWRpbmcgZnJvbSBhIHBy
b3RvdHlwZS4gV2UgZXhwZWN0IHRoZSBiYXNlIG5vdCB0byBoYXZlIHRoZQogICAgICAgICAgICAg
ICAgIC8vIHByb3BlcnR5LiBXZSBjYW4gb25seSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24g
aWYgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGluIHRoZQpAQCAtMjYyNiw5ICsyNjM0LDE4IEBAIE5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAogICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAg
ICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CiAgICAgICAgIH0K
KworICAgICAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlOworICAgICAg
ICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKSB7CisgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSog
c3RydWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkgeworICAgICAgICAgICAgICAgIElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0aGlzVHlwZSA9IG1fZ3JhcGguaW5mZXJyZWRUeXBlRm9y
UHJvcGVydHkoc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZS5t
ZXJnZSh0aGlzVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgICAgIAogICAgICAgICBs
b2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgbG9hZFByZWRpY3Rp
b24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7Cisg
ICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBsb2FkT3ApOwogICAgIH0KIAogICAgIHJldHVybiBs
b2FkZWRWYWx1ZTsKQEAgLTI2MzksNyArMjY1Niw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpz
dG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAKICAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlh
bnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVybiBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVu
dGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5
T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQucmVxdWly
ZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJ
ZCgKQEAgLTI3OTgsNiArMjgxNSw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
SWQoCiAgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAg
ICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworCisg
ICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVz
LnZhcmlhbnRzKCkpCisgICAgICAgICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKHZh
cmlhbnQucmVxdWlyZWRUeXBlKCkpOwogICAgICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNl
dERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAg
ICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJZFN0YXR1cy52YXJpYW50cygpOwpAQCAtMjg1NCw2
ICsyODc0LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRk
KCk7CiAgICAgICAgIGRhdGEtPm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CiAgICAgICAgIGRh
dGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBkYXRhLT5p
bmZlcnJlZFR5cGUgPSB2YXJpYW50LnJlcXVpcmVkVHlwZSgpOworICAgICAgICBtX2dyYXBoLnJl
Z2lzdGVySW5mZXJyZWRUeXBlKGRhdGEtPmluZmVycmVkVHlwZSk7CiAgICAgICAgIAogICAgICAg
ICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgUHV0QnlPZmZzZXQsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNp
b24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgYm9vbCBjbG9iYmVyc0V4
aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZAogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRp
b246CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDb3Vu
dEV4ZWN1dGlvbjoKKyAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBt
ZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMgb2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8g
c2VwYXJhdGUgdGhlCiAgICAgICAgIC8vIGhlYXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2
YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5v
dy4KICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDg0NDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCisj
aW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hlY2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25T
ZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIK
QEAgLTM3Myw3ICszNzQsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgJiYg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJp
YW50OjpyZXBsYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQpAQCAtNDQ4LDYgKzQ1MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWVWYWx1ZSA9
IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7CiAKICAgICAgICAgICAgICAgICBtX2lu
dGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5v
ZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAgICAgICAgICAgICAgYWxyZWFk
eUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xk
ZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCkBAIC00NjMsNyArNDY2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGF0dXMubnVtVmFyaWFudHMoKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpID4gMSAmJiAhaXNGVEwobV9n
cmFwaC5tX3BsYW4ubW9kZSkpCkBAIC02NDAsNyArNjQzLDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgY2hpbGRFZGdlLCBpZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBlbWl0R2V0
QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlLCBFZGdlIGNoaWxkRWRn
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAg
IHZvaWQgZW1pdEdldEJ5T2Zmc2V0KAorICAgICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5v
ZGUqIG5vZGUsIEVkZ2UgY2hpbGRFZGdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAorICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3ApCiAgICAgewogICAgICAgICBjaGls
ZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAKQEAgLTY1Niw2ICs2NjEs
NyBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBo
Lm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0
OwogICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAg
ICAgICBkYXRhLmluZmVycmVkVHlwZSA9IGluZmVycmVkVHlwZTsKICAgICAgICAgCiAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CiAgICAg
fQpAQCAtNjY0LDggKzY3MCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZU9yaWdp
biBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+
Y2hpbGQxKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ss
IG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGluc2Vy
dEluZmVycmVkVHlwZUNoZWNrKAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5C
bG9jaywgb3JpZ2luLCBub2RlLT5jaGlsZDIoKS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBl
KCkpOwogCiAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsK
ICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKQEAgLTczMCw2ICs3
MzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gQXJpc2VzIHdoZW4gd2UgcHJ1bmUgTXVs
dGlHZXRCeU9mZnNldC4gV2UgY291bGQgaGF2ZSBhCiAgICAgICAgICAgICAvLyBNdWx0aUdldEJ5
T2Zmc2V0IHdpdGggYSBzaW5nbGUgdmFyaWFudCB0aGF0IGNoZWNrcyBmb3Igc3RydWN0dXJlIFMs
CiAgICAgICAgICAgICAvLyBhbmQgdGhlIGlucHV0IGhhcyBzdHJ1Y3R1cmVzIFMgYW5kIFQsIGZv
ciBleGFtcGxlLgorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc2V0KSksIG5vZGUtPmNoaWxkMSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZElu
ZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgREZHRGVzaXJlZEluZmVycmVkVHlwZV9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERGRydzIGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJl
ZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3ZSB3YW50IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJ
bmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0IHRoaXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0
IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFzcyBEZXNpcmVkSW5mZXJyZWRUeXBlIHsKK3B1Ymxp
YzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBlKCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRy
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgRGVzaXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5
cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAg
ICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkK
KyAgICB7CisgICAgfQorCisgICAgRGVzaXJlZEluZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBt
X2V4cGVjdGVkKEluZmVycmVkVHlwZTo6VG9wKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QgJiYgbV9leHBlY3RlZDsg
fQorCisgICAgSW5mZXJyZWRUeXBlKiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsg
fQorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBleHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwZWN0ZWQ7IH0KKworICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX29iamVjdC0+Y2FuV2F0Y2gobV9leHBlY3RlZCk7CisgICAgfQorCisg
ICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkgY29uc3QKKyAgICB7CisgICAgICAg
IG1fb2JqZWN0LT5hZGRXYXRjaHBvaW50KHdhdGNocG9pbnQpOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29iamVjdCA9PSBvdGhlci5tX29iamVjdAorICAgICAgICAgICAg
JiYgbV9leHBlY3RlZCA9PSBvdGhlci5tX2V4cGVjdGVkOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmpl
Y3QgJiYgbV9leHBlY3RlZCA9PSBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5m
ZXJyZWRUeXBlKj46Omhhc2gobV9vYmplY3QpICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAg
IH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9l
eHBlY3RlZCwgY29udGV4dCksICIgZm9yICIsIFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5m
ZXJyZWRUeXBlKiBtX29iamVjdDsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBl
Y3RlZDsKK307CisKK3N0cnVjdCBEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVk
VHlwZSYgYSwgY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0
eXBlZGVmIEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVz
aXJlZEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsMTEgQEAgdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRBZGFwdG9yOgogICAgIH0KIH0KIAordm9pZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IERlc2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9u
RGF0YSYgY29tbW9uKQoreworICAgIGtleS5hZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2Rl
QmxvY2spKTsKK30KKwogRGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7
IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05
Myw2ICs5OCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAg
ICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVz
aXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5
KQoreworICAgIG1faW5mZXJyZWRUeXBlcy5hZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlm
ICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQg
RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRj
aHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNl
dHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxW
YWxpZCgpCiAgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAg
ICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYg
bV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5m
ZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRz
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdApAQCAtMTI3LDYgKzEzOSw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5D
b250ZXh0KFAKICAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4
dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAg
QnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQobV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIp
OwogICAgIG91dC5wcmludCgiICAgIE9iamVjdCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNv
bnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQu
cHJpbnQoIiAgICBJbmZlcnJlZCB0eXBlczogIiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywg
Y29udGV4dCksICJcbiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJ
KHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAi
REZHRGVzaXJlZEluZmVycmVkVHlwZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmgiCkBAIC05MSw2ICs5MiwxOCBAQCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50QWRhcHRvCiAgICAgfQogfTsKIAorc3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3Igewor
ICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
JiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gIWtleS5p
c1N0aWxsVmFsaWQoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0
KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRl
eHQpKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwg
dHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4K
IGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQK
QEAgLTE1OSw2ICsxNzIsMTAgQEAgcHVibGljOgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhh
dCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9u
KCksIHdoaWNoIGRvZXMKICAgICAvLyB0aGUgcmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBz
b21lIG90aGVyIGJvb2trZWVwaW5nLgogICAgIHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJik7CisKKyAgICAvLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRv
bid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNlIEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hp
Y2ggZG9lcworICAgIC8vIHRoZSByZXF1aXJlZCBHQyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemls
eShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihT
dHJ1Y3R1cmUqKTsKICAgICAKQEAgLTE4Niw2ICsyMDMsMTAgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAg
IH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAg
IH0KIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3
LDcgQEAgcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFs
dWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmlj
RGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0
Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxEZXNpcmVkSW5mZXJyZWRUeXBlLCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVy
cmVkVHlwZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4OTkyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgog
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5j
bHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKQEAgLTEwOTIsNiArMTA5Myw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdl
UmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldCwgbV9pbmRleEluQmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hp
bGQzKCkubm9kZSgpLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCku
aW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAgIHNwZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hp
bGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDEyICsy
NjEsMTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNj
ZXNzRGF0YSgpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NE
YXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0
YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CisgICAgICAgIG91
dC5wcmludCgiLCBpbmZlcnJlZFR5cGUgPSAiLCBpbkNvbnRleHQoc3RvcmFnZUFjY2Vzc0RhdGEu
aW5mZXJyZWRUeXBlLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNNdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0g
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
aWQiLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50
aWZpZXJOdW1iZXJdLCAifSIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0
YS5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGEuY2FzZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5D
b250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRleHQpKTsKKyAgICAgICAgICAgIGlmIChkYXRhLmNh
c2VzW2ldLm1ldGhvZCgpLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIiAoaW5mZXJyZWQgdmFsdWUgPSAiLCBpbkNvbnRleHQoaW5m
ZXJyZWRWYWx1ZUZvclByb3BlcnR5KGRhdGEuY2FzZXNbaV0uc2V0KCksIGlkZW50aWZpZXJzKClb
ZGF0YS5pZGVudGlmaWVyTnVtYmVyXSksIGNvbnRleHQpLCAiKSIpOworICAgICAgICB9CiAgICAg
fQogICAgIGlmIChub2RlLT5oYXNNdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11
bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsK
QEAgLTg4Nyw2ICs4OTEsMzggQEAgYm9vbCBHcmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBi
YXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xvYWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmFz
ZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJy
ZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlwZUtleSYga2V5KQoreworICAgIGFzc2VydElzUmVn
aXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOworICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5mZXJy
ZWRUeXBlcy5maW5kKGtleSk7CisgICAgaWYgKGl0ZXIgIT0gbV9pbmZlcnJlZFR5cGVzLmVuZCgp
KQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGVP
YmplY3QgPSBrZXkuc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihrZXkudWlkKCkpOworICAg
IGlmICghdHlwZU9iamVjdCkgeworICAgICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5m
ZXJyZWRUeXBlOjpUb3ApOworICAgICAgICByZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAg
fQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIHR5cGVEZXNjcmlwdG9yID0gdHlwZU9i
amVjdC0+ZGVzY3JpcHRvcigpOworICAgIGlmICh0eXBlRGVzY3JpcHRvci5raW5kKCkgPT0gSW5m
ZXJyZWRUeXBlOjpUb3ApIHsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVy
cmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0K
KyAgICAKKyAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgdHlwZURlc2NyaXB0b3IpOworCisg
ICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0eXBlT2JqZWN0KTsKKyAgICByZWdp
c3RlckluZmVycmVkVHlwZSh0eXBlRGVzY3JpcHRvcik7CisKKyAgICAvLyBOb3RlIHRoYXQgd2Ug
bWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhpcyBkZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1
c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkKKyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZl
cnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9wbGFuLndhdGNocG9pbnRzLmFkZExhemlseShEZXNp
cmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3QsIHR5cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1
cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2
ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sq
LCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9
IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNvZGVCbG9jayk7CkBAIC0xMDYxLDcgKzEwOTcsNyBA
QCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTCiBKU1ZhbHVlIEdyYXBo
Ojp0cnlHZXRDb25zdGFudFByb3BlcnR5KAogICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0g
ICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7Cisg
ICAgaWYgKHN0cnVjdHVyZS5pc0luZmluaXRlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IElmIHdl
IGp1c3QgY29udmVydGVkIHRoZSBvZmZzZXQgdG8gYSB1aWQsIHdlIGNvdWxkIGRvIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uCiAgICAgICAgIC8vIHdhdGNoaW5nIHRvIGNvbnN0YW50LWZvbGQgdGhl
IHByb3BlcnR5LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ3MjcxCkBAIC0xMDc2LDYgKzExMTIsMzcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShjbwogICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJh
c2UubV92YWx1ZSwgYmFzZS5tX3N0cnVjdHVyZSwgb2Zmc2V0KTsKIH0KIAorQWJzdHJhY3RWYWx1
ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNs
b2JiZXJTdGF0ZSkKK3sKKyAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICBiYXNlLmZvckVh
Y2goCisgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXQoKnRoaXMsIGluZmVycmVk
VHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwgdWlkKSk7CisgICAgICAgICAgICByZXN1bHQubWVy
Z2UodmFsdWUpOworICAgICAgICB9KTsKKyAgICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVy
ZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIHJlc3VsdC5jbG9iYmVyU3RydWN0dXJlcygpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0Fic3RyYWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVG
b3JQcm9wZXJ0eSgKKyAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgU3RydWN0dXJlQ2xvYmJlclN0
YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0
YW50UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0LnNldCgqdGhpcywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0
ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1
Y3R1cmUuaXNGaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0
eShiYXNlLm1fc3RydWN0dXJlLnNldCgpLCB1aWQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1
cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgpOworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRD
b25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQg
Zm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVk
ZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgorI2luY2x1ZGUgIkRGR1Byb3BlcnR5VHlwZUtleS5o
IgogI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVu
ZXNzLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgpAQCAtNjc1LDYgKzY3NiwyNyBAQCBwdWJsaWM6
CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25vd24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVu
IG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21w
dXRlZCBieSB0cmFja2luZyB3aGljaCBjb25kaXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25k
aXRpb24oKS4KICAgICBib29sIGlzU2FmZVRvTG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlP
ZmZzZXQpOworCisgICAgdm9pZCByZWdpc3RlckluZmVycmVkVHlwZShjb25zdCBJbmZlcnJlZFR5
cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlwZS5zdHJ1Y3R1cmUo
KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKHR5cGUuc3RydWN0dXJlKCkpOworICAg
IH0KKworICAgIC8vIFRlbGxzIHVzIHdoYXQgaW5mZXJyZWQgdHlwZSB3ZSBhcmUgYWJsZSB0byBw
cm92ZSB0aGUgcHJvcGVydHkgdG8gaGF2ZSBub3cgYW5kIGluIHRoZSBmdXR1cmUuCisgICAgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVycmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVL
ZXkmKTsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yUHJvcGVy
dHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgewor
ICAgICAgICByZXR1cm4gaW5mZXJyZWRUeXBlRm9yKFByb3BlcnR5VHlwZUtleShzdHJ1Y3R1cmUs
IHVpZCkpOworICAgIH0KKworICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3Bl
cnR5KAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkKTsKKwor
ICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29uc3RhbnQgcHJvcGVydHkgaW5mZXJlbmNlIG9yIHBy
b3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRlcml2ZSBhIGdvb2QgYWJzdHJhY3QKKyAgICAvLyB2
YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nlc3NlZCB3aXRoIHRoZSBnaXZlbiBhYnN0cmFjdCB2
YWx1ZSBiYXNlLgorICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAor
ICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICAKICAgICBGdWxs
Qnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NGb3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElubGluZUNhbGxGcmFtZSopOwpAQCAtODU2LDYgKzg3
OCw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxG
dWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENv
ZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxz
OwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3Nh
ZmVUb0xvYWQ7CisgICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwog
ICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29w
cyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5m
ZXJyZWRUeXBlQ2hlY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVD
aGVjaygKKyAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4
LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSogYmFzZU5vZGUsCisgICAgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJiB0eXBlKQoreworICAgIGluc2VydGlvblNldC5ncmFwaCgpLnJlZ2lz
dGVySW5mZXJyZWRUeXBlKHR5cGUpOworICAgIAorICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG9yaWdpbik7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2lu
LCBFZGdlKGJhc2VOb2RlLCBCb29sZWFuVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNh
c2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
bm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT3RoZXJV
c2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgor
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVj
aywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBJbnQzMlVzZSkpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2Rl
LCBOdW1iZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OlN0cmluZzoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVj
Tm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgU3RyaW5nVXNlKSk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5z
ZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAg
ICAgICAgICAgIEVkZ2UoYmFzZU5vZGUsIENlbGxVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9u
U2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAg
ICAgIEVkZ2UoYmFzZU5vZGUsIENlbGxPck90aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUs
IE9iamVjdFVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4
LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT2JqZWN0T3JPdGhlclVz
ZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgREZHX0NSQVNIKGluc2VydGlvblNldC5ncmFwaCgp
LCBiYXNlTm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKyNkZWZp
bmUgREZHSW5mZXJyZWRUeXBlQ2hlY2tfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBJbnNlcnRzIGEgdHlwZSBjaGVjayB0
aGF0IGVuc3VyZXMgdGhhdCBiYXNlTm9kZSBoYXMgdGhlIGdpdmVuIGluZmVycmVkIHR5cGUuCit2
b2lkIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVk
IG5vZGVJbmRleCwgTm9kZU9yaWdpbiwgTm9kZSogYmFzZU5vZGUsIGNvbnN0IEluZmVycmVkVHlw
ZTo6RGVzY3JpcHRvciYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCwxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jazsKIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0
YSB7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXI7CisKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGtub3cgdGhlIGluZmVycmVkIHR5cGUuIEZv
ciBwdXRzLCB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gcmVtZW1iZXIKKyAg
ICAvLyB3aGF0IGNoZWNrIGlzIG5lZWRlZC4gRm9yIGdldHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2Ugb3RoZXJ3aXNlIEFJIG1pZ2h0IGZvcmdldCB3aGF0IHR5cGUgaXMKKyAgICAvLyBndWFy
YW50ZWVkLgorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CiB9Owog
CiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTM1
LDE0ICsyMTM1LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBjdXJyZW50T2Zmc2V0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBCZWNhdXNlIG91ciBhbmFseXNpcyB0cmVhdHMgTXVsdGlQdXRCeU9mZnNl
dCBsaWtlIGFuIGVzY2FwZSwgd2Ugb25seSBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkZWFsIHdpdGggc3RvcmluZyByZXN1bHRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXZp
b3VzbHkgc3RvcmVkIGJ5IFB1dEJ5T2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBu
b2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFyZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNo
ZWNrcy4gVGhpcyBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlz
IHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0
aGUgcmlnaHQgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0
cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJp
YW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVudE9mZnNldCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZz
ZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVh
cigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
ZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRh
dGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBj
dXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAor
ICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBj
dXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6OlRvcCkpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlwZUtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR1Byb3BlcnR5VHlwZUtleV9oCisjZGVmaW5lIERGR1Byb3BlcnR5
VHlwZUtleV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworLy8gVGhpcyBvYmplY3QgaXMgYSBrZXkgZm9yIGZpbmRpbmcgYSBwcm9wZXJ0eSdz
IHR5cGUuIEl0J3MgYSB0dXBsZSBvZiBTdHJ1Y3R1cmUqIGFuZCBVbmlxdWVkU3RyaW5nSW1wbCou
CisKK2NsYXNzIFByb3BlcnR5VHlwZUtleSB7CitwdWJsaWM6CisgICAgUHJvcGVydHlUeXBlS2V5
KCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1fdWlkKG51bGxw
dHIpCisgICAgeworICAgIH0KKworICAgIFByb3BlcnR5VHlwZUtleShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1
Y3R1cmUpCisgICAgICAgICwgbV91aWQodWlkKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0
eVR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fc3Ry
dWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV91aWQoZGVsZXRlZFVJRCgpKQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmUgJiYgbV91aWQ7IH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3Qg
eyByZXR1cm4gbV91aWQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5
cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09
IG90aGVyLm1fc3RydWN0dXJlCisgICAgICAgICAgICAmJiBtX3VpZCA9PSBvdGhlci5tX3VpZDsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpICsgV1RGOjpQdHJIYXNoPFVu
aXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91aWQpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0cnVj
dHVyZSAmJiBtX3VpZCA9PSBkZWxldGVkVUlEKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAg
IHsKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0dXJlLCBj
b250ZXh0KSwgIisiLCBtX3VpZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7
CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBVbmlxdWVkU3RyaW5nSW1wbCogZGVsZXRl
ZFVJRCgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJ
bXBsKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0
dXJlKiBtX3N0cnVjdHVyZTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7Cit9OworCitz
dHJ1Y3QgUHJvcGVydHlUeXBlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIGEsIGNvbnN0IFByb3BlcnR5VHlw
ZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlBy
b3BlcnR5VHlwZUtleT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleUhh
c2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiA6
IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R1Byb3BlcnR5VHlwZUtleV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgY2FzZSBC
b29sZWFuVXNlOgogICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgIGNhc2UgQ2VsbE9yT3Ro
ZXJVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNl
OgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgpAQCAtMTI3LDYgKzEyOCw5IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBpZiAoIXNhZmVUb0V4ZWN1
dGVFZGdlLnJlc3VsdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBOT1RFOiBU
aGlzIHRlbmRzIHRvIGxpZSB3aGVuIGl0IGNvbWVzIHRvIGVmZmVjdGZ1bCBub2RlcywgYmVjYXVz
ZSBpdCBrbm93cyB0aGF0IHRoZXkgYXJlbid0IGdvaW5nIHRvCisgICAgLy8gZ2V0IGhvaXN0ZWQg
YW55d2F5LgorCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50
OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4OTky
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OTgsMzYgKzM4OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNl
dCgpLnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCku
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAw
LAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlLmdwcigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3Ry
dWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKQotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCks
IG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFdlYWtQdHIoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3Ry
dWN0dXJlLmdwcigpLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4
OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MTEsMzggKzM5MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNl
dCgpLnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgZXhpdEtp
bmQgPSBCYWRDb25zdGFudENhY2hlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0S2lu
ZCA9IEJhZENhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgp
LnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgIGV4aXRLaW5kLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwg
MCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAotICAgICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZShKSVRDb21waWxlcjo6RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG5v
ZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdl
YWtTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjMyLDYgKzUyMzIsODEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVR5cGVPZihOb2RlKgogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUsIEdQUlJl
ZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJl
U2V0KCkuc2l6ZSgpKTsKKyAgICAKKyAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgp
ID09IDEpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0
dXJlU2V0KClbMF0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BS
VGVtcG9yYXJ5PiBzdHJ1Y3R1cmU7CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFI7CisgICAg
ICAgIAorICAgICAgICBpZiAodGVtcEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPEdQUlRlbXBvcmFyeT4odGhpcyk7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUtPmdwcigpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9IHRlbXBHUFI7CisgICAgICAgIAorICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAg
IGRvbmUuYXBwZW5kKAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUo
SklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ld
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAs
CisgICAgICAgICAgICBtX2ppdC5icmFuY2hXZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQo
KS5sYXN0KCkpKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0K
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5v
ZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNl
IENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNlbGxVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNvbXBpbGVDaGVj
a1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENlbGxPck90
aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVl
UmVncygpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1faml0LmJyYW5jaElmQ2VsbCh2YWx1ZVJlZ3MpOwor
ICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIHZhbHVlUmVncywgbm9kZS0+Y2hp
bGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZO
b3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgY2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAg
IGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1w
R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NS
QVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJl
dmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKQEAgLTU2MzYsNiArNTcxMSwyMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2UgCiAgICAgKFNwZWN1bGF0
ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBl
Q2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gbV9qaXQu
YnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsCisgICAgICAgIG1faml0LmJyYW5jaElmTm90T3RoZXIob3BlcmFuZC5qc1ZhbHVlUmVncygp
LCB0ZW1wR1BSKSk7CisgICAgb2subGluaygmbV9qaXQpOworfQorCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hl
Y2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01OTE2LDYgKzYwMDcsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBz
cGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxPck90aGVy
VXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMTUsNiArMjIxNSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiwgR1BSUmVnIGNlbGxH
UFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2Rl
Kik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFs
c2VUbyhHUFJSZWcpOwpAQCAtMjM3NCw2ICsyMzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3Bl
Y3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRn
ZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQ2Vs
bE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSk7CiAgICAgdm9p
ZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0
KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4OTkyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUg
YnV0IHRoZW4gcnVuIHRoZWlyIG93biBiYXJyaWVyLgotICAgICAgICAgICAgICAgIGluc2VydEJh
cnJpZXJXaXRoSW52YWxpZEV4aXQobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVy
KG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxs
VXNlKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTQ4MSwxMSArNDgxLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFzZSk7CiAgICAg
fQogCi0gICAgdm9pZCBpbnNlcnRCYXJyaWVyV2l0aEludmFsaWRFeGl0KHVuc2lnbmVkIG5vZGVJ
bmRleCwgRWRnZSBiYXNlKQotICAgIHsKLSAgICAgICAgaW5zZXJ0QmFycmllcihub2RlSW5kZXgs
IGJhc2UsIGZhbHNlKTsKLSAgICB9Ci0KICAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQg
bm9kZUluZGV4LCBFZGdlIGJhc2UsIGJvb2wgZXhpdE9LID0gdHJ1ZSkKICAgICB7CiAgICAgICAg
IC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2RlLCB3ZSBzaG91bGQgb25seSBpbnNlcnQgdGhlIGJh
cnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJnZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gYXQoaSk7IH0KLSAgICAKKwogICAgIC8vIEluIG1vc3QgY2FzZXMsIHdoYXQgeW91IHJlYWxs
eSB3YW50IHRvIGRvIGlzIHZlcmlmeSB3aGV0aGVyIHRoZSBzZXQgaXMgdG9wIG9yIGNsb2JiZXJl
ZCwgYW5kCiAgICAgLy8gaWYgbm90LCBlbnVtZXJhdGUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzLiBV
c2UgdGhpcyBvbmx5IGluIGNhc2VzIHdoZXJlIHRoZSBzaW5nbGV0b24gY2FzZSBpcwogICAgIC8v
IG1lYW5pbmdmdWxseSBzcGVjaWFsLCBsaWtlIGZvciB0cmFuc2l0aW9ucy4KQEAgLTIwMiw2ICsy
MDIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiBtX3NldC5vbmx5U3RydWN0dXJlKCk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIG1fc2V0LmZvckVh
Y2goZnVuY3Rvcik7CisgICAgfQogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJl
dmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDkgQEAgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICBvdXQu
cHJpbnQoIktub3duQ2VsbCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBDZWxsT3JPdGhl
clVzZToKKyAgICAgICAgb3V0LnByaW50KCJDZWxsT3JPdGhlciIpOworICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShy
ZXZpc2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtu
b3duQm9vbGVhblVzZSwKICAgICBDZWxsVXNlLAogICAgIEtub3duQ2VsbFVzZSwKKyAgICBDZWxs
T3JPdGhlclVzZSwKICAgICBPYmplY3RVc2UsCiAgICAgRnVuY3Rpb25Vc2UsCiAgICAgRmluYWxP
YmplY3RVc2UsCkBAIC0xMDgsNiArMTA5LDggQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVG
aWx0ZXJGb3IoVXNlSwogICAgIGNhc2UgQ2VsbFVzZToKICAgICBjYXNlIEtub3duQ2VsbFVzZToK
ICAgICAgICAgcmV0dXJuIFNwZWNDZWxsOworICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjQ2VsbCB8IFNwZWNPdGhlcjsKICAgICBjYXNlIE9iamVjdFVzZToKICAg
ICAgICAgcmV0dXJuIFNwZWNPYmplY3Q7CiAgICAgY2FzZSBGdW5jdGlvblVzZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxODk5Mjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYzLDYgKzI2Myw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCw3IEBAIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIEtub3duQm9vbGVh
blVzZToKICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBLbm93bkNlbGxVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0
aW9uVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxODk5MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNiwyMSArMjAyNiw1NyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKICAgICB7Ci0gICAgICAgIExW
YWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCiAgICAgICAg
IEV4aXRLaW5kIGV4aXRLaW5kOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIAotICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAg
ICAgICAgIHN0cnVjdHVyZUlELCBqc1ZhbHVlVmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUt
PnN0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVz
ZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAg
ICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1Zh
bHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0
dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tT
dHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1
Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENh
c2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAorICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBq
c1ZhbHVlVmFsdWUodmFsdWUpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0
cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoKQpAQCAtNDAy
Miw2ICs0MDU4LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nr
c1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07CisKKyAgICAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9kZS0+
Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7CiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKQEAgLTU2NzQsNiArNTcxMiwxMzUgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CiAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOwogICAgIH0K
KworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUsIGNv
bnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7CisgICAgICAgIC8vIFRo
aXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0IGlz
IGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAgICAgICAvLworICAgICAg
ICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8vCisgICAgICAgIC8vIG1h
eSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgc3dpdGNoIChvYmpl
Y3QtPnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoKKyAgICAgICAgLy8gICAg
ICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAgICAgLy8gICAgICAgICAu
Li4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8gICAgIGNhc2UgNDM6Cisg
ICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7CisgICAgICAg
IC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vICAg
ICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUgZGlm
ZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291bGQg
YmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0eXBl
MSB8IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5ib29sZWFuVHJ1
ZSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJv
b2xlYW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
aXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90TnVt
YmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVlLCBwcm92ZW5U
eXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJv
dmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1f
c3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVl
LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3
ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0
cnVjdHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUg
T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNl
bGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAg
ICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
U3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwg
ZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5z
dHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwg
Y29udGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAg
IEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAg
ICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKKwor
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAg
ICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCks
IGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE9iamVj
dCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5
cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBu
b3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmpl
Y3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5v
ZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSAmIFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVy
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJl
ZCB0eXBlIik7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0
b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
ICAgICB7CkBAIC03NTE0LDYgKzc2ODEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENlbGxV
c2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxs
T3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtub3duQ2Vs
bFVzZToKICAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhl
ZGdlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc1OTQsNiArNzc2NCwyMiBAQCBwcml2YXRl
OgogICAgICAgICBsb3dDZWxsKGVkZ2UpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNwZWN1bGF0
ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICBMQmFz
aWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxs
T3JPdGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgY29udGludWF0aW9u
IikpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2VsbCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RDZWxsLCBjb250aW51
YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
LCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUlu
dChFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBl
Q2hlY2soZWRnZSkpCkBAIC04MTI3LDYgKzgzMTMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVh
bkZhbHNlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0
LnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
YXBwZW5kKE9TUkV4aXQoCkBAIC04MTM1LDkgKzgzMjQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAg
ICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGls
YXRpb25JbmZvKCkpOwotICAgICAgICAKKwogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlv
biA9PSBtX291dC5ib29sZWFuVHJ1ZSkgeworICAgICAgICAgICAgZW1pdE9TUkV4aXRDYWxsKGV4
aXQsIGxvd1ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxODk5MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDc4IEBAIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3Nl
bWIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorQXNzZW1ibHlIZWxw
ZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSgKKyAgICBKU1Zh
bHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUpCit7CisgICAgQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgp
KSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29s
ZWFuOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1w
R1BSKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ3MsIG1vZGUpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIsIG1vZGUpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQu
YXBwZW5kKAorICAgICAgICAgICAgYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIE5v
dEVxdWFsLAorICAgICAgICAgICAgICAgIEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1
Y3R1cmUoKSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhl
cihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgYnJhbmNo
U3RydWN0dXJlKAorICAgICAgICAgICAgICAgIE5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEFk
ZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBvay5saW5r
KHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6
T2JqZWN0OgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2Rl
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0
T3JPdGhlcjogeworICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BS
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4oRlBSUmVn
IGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBicmFuY2hEb3VibGUo
RG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTU1LDM3ICs1
NTUsNDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hJZk5vdENl
bGwoR1BSUmVnIHJlZykKKyAgICBlbnVtIFRhZ1JlZ2lzdGVyc01vZGUgeworICAgICAgICBEb05v
dEhhdmVUYWdSZWdpc3RlcnMsCisgICAgICAgIEhhdmVUYWdSZWdpc3RlcnMKKyAgICB9OworCisg
ICAgSnVtcCBicmFuY2hJZk5vdENlbGwoR1BSUmVnIHJlZywgVGFnUmVnaXN0ZXJzTW9kZSBtb2Rl
ID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
cmV0dXJuIGJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVnLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJz
KQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWcsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnLCBUcnVzdGVkSW1tNjQoVGFnTWFzaykpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFN
KG1vZGUpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAjZW5kaWYKICAgICB9Ci0g
ICAgSnVtcCBicmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICBKdW1wIGJyYW5j
aElmTm90Q2VsbChKU1ZhbHVlUmVncyByZWdzLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZl
VGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4g
YnJhbmNoSWZOb3RDZWxsKHJlZ3MuZ3ByKCkpOworICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RD
ZWxsKHJlZ3MuZ3ByKCksIG1vZGUpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90
Q2VsbChyZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChyZWdz
LnRhZ0dQUigpLCBtb2RlKTsKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaElm
Q2VsbChHUFJSZWcgcmVnKQorICAgIEp1bXAgYnJhbmNoSWZDZWxsKEdQUlJlZyByZWcsIFRhZ1Jl
Z2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2
ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVn
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0
KFplcm8sIHJlZywgVHJ1c3RlZEltbTY0KFRhZ01hc2spKTsKICNlbHNlCisgICAgICAgIFVOVVNF
RF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgcmVnLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogI2VuZGlmCiAgICAg
fQotICAgIEp1bXAgYnJhbmNoSWZDZWxsKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgSnVtcCBicmFu
Y2hJZkNlbGwoSlNWYWx1ZVJlZ3MgcmVncywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRh
Z1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJy
YW5jaElmQ2VsbChyZWdzLmdwcigpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaElmQ2VsbChyZWdz
LmdwcigpLCBtb2RlKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBicmFuY2hJZkNlbGwocmVncy50
YWdHUFIoKSk7CisgICAgICAgIHJldHVybiBicmFuY2hJZkNlbGwocmVncy50YWdHUFIoKSwgbW9k
ZSk7CiAjZW5kaWYKICAgICB9CiAgICAgCkBAIC02MTMsNDMgKzYyNCw1NSBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB9CiAgICAgCi0gICAgSnVtcCBicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHJl
Z3MpCisgICAgSnVtcCBicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVy
c01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZ3MuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdS
ZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdz
LmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4g
YnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlcikpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICByZXR1
cm4gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIEp1bXAgYnJhbmNoSWZOb3RJbnQz
MihKU1ZhbHVlUmVncyByZWdzKQorICAgIEp1bXAgYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVn
cyByZWdzLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3csIHJlZ3Mu
Z3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2Rl
ID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3cs
IHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiBicmFuY2g2NChCZWxvdywgcmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1i
ZXIpKTsKICNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKTsKICNlbmRpZgogICAgIH0KIAogICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQ
UiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9kZS4KLSAgICBKdW1wIGJyYW5jaElmTnVtYmVyKEpT
VmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAgIEp1bXAgYnJhbmNoSWZOdW1iZXIo
SlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9
IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIFVO
VVNFRF9QQVJBTSh0ZW1wR1BSKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJv
LCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBp
ZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRl
c3Q2NChOb25aZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW02NChUYWdUeXBlTnVtYmVyKSk7CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9k
ZSk7CiAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSwgdGVtcEdQ
Uik7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihCZWxvdywgdGVtcEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsKICNlbmRpZgogICAgIH0KICAgICAKICAgICAvLyBO
b3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4gNjQtYml0IG1vZGUuCi0gICAgSnVt
cCBicmFuY2hJZk5vdE51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAg
ICBKdW1wIGJyYW5jaElmTm90TnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BS
LCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICBVTlVTRURfUEFSQU0odGVtcEdQUik7Ci0gICAgICAgIHJl
dHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCBy
ZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAg
VU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3Mu
dGFnR1BSKCksIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwogI2VuZGlm
CkBAIC03MTksNiArNzQyLDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgSnVtcExp
c3QgYnJhbmNoSWZOb3RUeXBlKAorICAgICAgICBKU1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYsIFRhZ1JlZ2lzdGVyc01vZGUpOworCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBsZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRT
dG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVu
c2V0CiAgICAgICAgICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJl
c3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3RvcmFnZSkKLSAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAg
ICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewog
CiAgICAgICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAogICAgICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMyw2ICs2MzMsOCBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgIHBjWzVdLnUucG9pbnRl
ciA9IG51bGxwdHI7IC8vIG9mZnNldAogICAgICAgICBwY1s2XS51LnBvaW50ZXIgPSBudWxscHRy
OyAvLyBuZXcgc3RydWN0dXJlCiAgICAgICAgIHBjWzddLnUucG9pbnRlciA9IG51bGxwdHI7IC8v
IHN0cnVjdHVyZSBjaGFpbgorICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KHBjWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0
QnlJZFBlcnNpc3RlbnRGbGFnc01hc2spOwogICAgICAgICAKICAgICAgICAgSlNDZWxsKiBiYXNl
Q2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CkBAIC02NjAsMTIgKzY2MiwxOCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGNbN10udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5
SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxhZ3MgfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcihpZGVudC5pbXBsKCkpLnB1
dEJ5SWRGbGFncygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNo
ZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgIHBjWzRdLnUuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgICAgICAg
ICAgICAgcGNbNV0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAg
ICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisg
ICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzIHwKKyAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSku
cHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE4OTkyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzkwLDE3ICsxMzkwLDkxIEBAIF9sbGludF9vcF9wdXRfYnlfaWQ6CiAgICAgIyBBdCB0aGlzIHBv
aW50LCB3ZSBoYXZlOgogICAgICMgdDIgLT4gY3VycmVudFN0cnVjdHVyZUlECiAgICAgIyB0MCAt
PiBvYmplY3QgYmFzZQorICAgICMgV2Ugd2lsbCBsb3NlIGN1cnJlbnRTdHJ1Y3R1cmVJRCBpbiB0
aGUgc2hlbmFuaWdhbnMgYmVsb3cuCiAKKyAgICBsb2FkaSAxMltQQ10sIHQxCisgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZSh0MSwgdDIsIHQzKQorICAgIGxvYWRpIDMyW1BDXSwgdDEKKworICAg
ICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVjdCBiYXNlCisgICAg
IyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IHZhbHVlIHRhZworICAgICMgdDMg
LT4gdmFsdWUgcGF5bG9hZAorCisgICAgYnRpbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ss
IC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcgorCisgICAgIyBX
ZSBoYXZlIG9uZSBvZiB0aGUgbm9uLXN0cnVjdHVyZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hp
Y2ggb25lLgorICAgIGFuZGkgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrLCB0MQorICAgIGJpbHQg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1Ro
YW5TdHJpbmcKKworICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIE9i
amVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCisgICAgYmlsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVy
CisKKyAgICAjIFdlIGFyZSBlaXRoZXIgT2JqZWN0T3JPdGhlciBvciBUb3AuCisgICAgYmllcSB0
MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
CisgICAgIyBDaGVjayBpZiB3ZSBhcmUgT2JqZWN0T3JPdGhlci4KKyAgICBiaWVxIHQyLCBDZWxs
VGFnLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0Cisub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6
CisgICAgYmllcSB0MiwgTnVsbFRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAg
YmllcSB0MiwgVW5kZWZpbmVkVGFnLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBq
bXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JP
dGhlcjoKKyAgICAjIFdlIGFyZSBlaXRoZXIgU3RyaW5nIG9yIE9iamVjdC4KKyAgICBiaW5lcSB0
MiwgQ2VsbFRhZywgLm9wUHV0QnlJZFNsb3cKKyAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU9iamVjdCwgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorICAgIGJiZXEgSlNDZWxsOjpt
X3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBq
bXAgLm9wUHV0QnlJZFNsb3cKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3Q6CisgICAgYmJhZXEg
SlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFu
U3RyaW5nOgorICAgICMgV2UgYXJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xl
YW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyLgorICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tMZXNzVGhhbkludDMyCisKKyAgICAjIFdlIGFy
ZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgorICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyCisKKyAgICBiaWVxIHQyLCBJbnQz
MlRhZywgLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93
CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1iZXI6CisgICAgYmliIHQyLCBMb3dlc3RUYWcgKyAx
LCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKwor
Lm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25lIG9mIHRo
ZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIKKyAgICBiaW5lcSB0MSwgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVCb29sZWFuLCAub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgor
ICAgIGJpZXEgdDIsIEJvb2xlYW5UYWcsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAg
IGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoK
KyAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09i
amVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5
SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlCisgICAgYnRpbnogdDEsIFB1dEJ5SWRQcmlt
YXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3Ro
ZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdp
dGhTdHJ1Y3R1cmU6CisgICAgYW5kaSBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCisgICAg
YmluZXEgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIC5vcFB1dEJ5SWRTbG93CisKKy5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlczoKICAgICBsb2FkaSAyNFtQQ10sIHQxCiAKICAgICBi
dGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlvbgogCi0gICAgIyBUaGlzIGlzIHRoZSB0cmFu
c2l0aW9uIGNhc2UuIHQxIGhvbGRzIHRoZSBuZXcgU3RydWN0dXJlKi4gdDIgaG9sZHMgdGhlIG9s
ZCBTdHJ1Y3R1cmUqLgotICAgICMgSWYgd2UgaGF2ZSBhIGNoYWluLCB3ZSBuZWVkIHRvIGNoZWNr
IGl0LiB0MCBpcyB0aGUgYmFzZS4gV2UgbWF5IGNsb2JiZXIgdDEgdG8gdXNlIGl0IGFzCi0gICAg
IyBzY3JhdGNoLgorICAgICMgVGhpcyBpcyB0aGUgdHJhbnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0
aGUgbmV3IFN0cnVjdHVyZSouIElmIHdlIGhhdmUgYSBjaGFpbiwgd2UgbmVlZCB0bworICAgICMg
Y2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBtYXkgY2xvYmJlciB0MSB0byB1c2UgaXQgYXMg
c2NyYXRjaC4KICAgICBsb2FkcCAyOFtQQ10sIHQzCiAgICAgYnRweiB0MywgLm9wUHV0QnlJZFRy
YW5zaXRpb25EaXJlY3QKIAorICAgIGxvYWRpIDE2W1BDXSwgdDIgIyBOZWVkIG9sZCBzdHJ1Y3R1
cmUgYWdhaW4uCiAgICAgbG9hZHAgU3RydWN0dXJlQ2hhaW46Om1fdmVjdG9yW3QzXSwgdDMKICAg
ICBhc3NlcnQobWFjcm8gKG9rKSBidHBueiB0Mywgb2sgZW5kKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyNjUsMTQgKzEyNjUsODggQEAg
X2xsaW50X29wX3B1dF9ieV9pZDoKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVDZWxsKHQzLCB0MCwgLm9wUHV0QnlJZFNsb3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QwXSwgdDIKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmlu
ZXEgdDIsIHQxLCAub3BQdXRCeUlkU2xvdworICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0
MikKKyAgICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNs
b3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJy
ZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAj
IHQwIC0+IG9iamVjdCBiYXNlCiAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVj
dGlvbig4LCB0MSkKKworICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+
IG9iamVjdCBiYXNlCisgICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1
cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56
IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrLCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0
aFN0cnVjdHVyZU9yT3RoZXIKKworICAgICMgV2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1
cmUgdHlwZSBjaGVja3MuIEZpbmQgb3V0IHdoaWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlTWFzaywgdDEKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmlu
ZywgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUg
b2YgdGhlIGZvbGxvd2luZzogU3RyaW5nLCBPYmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAg
IGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5
cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVj
dE9yT3RoZXIgb3IgVG9wLgorICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAu
b3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVj
dE9yT3RoZXIuCisgICAgYnRxeiB0MywgdGFnTWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVj
dAorLm9wUHV0QnlJZFR5cGVDaGVja090aGVyOgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwg
dDMKKyAgICBicWVxIHQzLCBWYWx1ZU51bGwsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmpl
Y3RPck90aGVyOgorICAgICMgV2UgYXJlIGVpdGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0
cW56IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlkU2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNv
bmRhcnlUeXBlT2JqZWN0LCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0Nl
bGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBi
YmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9iamVjdFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tp
bmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVz
c1RoYW5TdHJpbmc6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwg
Qm9vbGVhbiwgT3RoZXIsIEludDMyLCBOdW1iZXIKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZUludDMyLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBX
ZSBhcmUgZWl0aGVyIEludDMyIG9yIE51bWJlci4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU51bWJlciwgLm9wUHV0QnlJZFR5cGVDaGVja051bWJlcgorCisgICAgYnFhZXEgdDMs
IHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQ
dXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0
YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0
QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBh
cmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBu
ZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0Jv
dHRvbU9yT3RoZXIKKyAgICB4b3JxIFZhbHVlRmFsc2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQ
dXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0
dXJlCisgICAgYnRwbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
KworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgdXJzaGlmdHAg
MywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJ
ZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzOgogICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlv
bgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiAr
MjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBMb3dlc3RUYWcgPSBEZWxldGVkVmFsdWVUYWcKIGVu
ZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbiBzeW5jIHdpdGggd2hhdCBp
cyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYK
K2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSA9IDB4MAorY29uc3QgUHV0QnlJZFBy
aW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSA9IDB4MgorY29uc3QgUHV0QnlJZFByaW1hcnlU
eXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgPSAweDQKK2NvbnN0IFB1dEJ5SWRTZWNvbmRh
cnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgw
Citjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4gPSAweDgKK2NvbnN0IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMy
ID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIgPSAweDIwCitjb25zdCBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9IDB4MjgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVy
ID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3AgPSAweDQwCisKIGNvbnN0IENh
bGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQgb3IgQVJNNjQgb3IgQ19MT09QCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxODk5
MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAj
aW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkNvbXBpbGF0aW9u
UmVzdWx0LmgiCi0jaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZv
LmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEluZmVycmVkVHlwZUZpcmVEZXRh
aWwgOiBwdWJsaWMgRmlyZURldGFpbCB7CitwdWJsaWM6CisgICAgSW5mZXJyZWRUeXBlRmlyZURl
dGFpbCgKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBpbmZlcnJlZFR5cGUsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsCisgICAgICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgb2xkRGVz
Y3JpcHRvciwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBuZXdEZXNjcmlwdG9yLAor
ICAgICAgICBKU1ZhbHVlIG9mZmVuZGluZ1ZhbHVlKQorICAgICAgICA6IG1faW5mZXJyZWRUeXBl
KGluZmVycmVkVHlwZSkKKyAgICAgICAgLCBtX3VpZCh1aWQpCisgICAgICAgICwgbV9vbGREZXNj
cmlwdG9yKG9sZERlc2NyaXB0b3IpCisgICAgICAgICwgbV9uZXdEZXNjcmlwdG9yKG5ld0Rlc2Ny
aXB0b3IpCisgICAgICAgICwgbV9vZmZlbmRpbmdWYWx1ZShvZmZlbmRpbmdWYWx1ZSkKKyAgICB7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiSW5m
ZXJyZWQgdHlwZSBjaGFuZ2VkIG9uICIsIFJhd1BvaW50ZXIobV9pbmZlcnJlZFR5cGUpLCAiIGZv
ciBwcm9wZXJ0eSAiLCBtX3VpZCwgIjogIgorICAgICAgICAgICAgIm9sZCB0eXBlIHdhcyAiLCBt
X29sZERlc2NyaXB0b3IsICIgd2hpbGUgZGVzaXJlZCB0eXBlIGlzICIsIG1fbmV3RGVzY3JpcHRv
cik7CisgICAgICAgIGlmIChtX29mZmVuZGluZ1ZhbHVlKQorICAgICAgICAgICAgb3V0LnByaW50
KCIgZHVlIHRvICIsIG1fb2ZmZW5kaW5nVmFsdWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJ
bmZlcnJlZFR5cGUqIG1faW5mZXJyZWRUeXBlOworICAgIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1w
bD4gbV91aWQ7CisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIG1fb2xkRGVzY3JpcHRvcjsK
KyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9uZXdEZXNjcmlwdG9yOworICAgIEpTVmFs
dWUgbV9vZmZlbmRpbmdWYWx1ZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitj
b25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVHlwZSkgfTsKKworSW5mZXJyZWRUeXBl
KiBJbmZlcnJlZFR5cGU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJ
bmZlcnJlZFR5cGUodm0pOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVy
cmVkVHlwZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJy
ZWRUeXBlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PElu
ZmVycmVkVHlwZSo+KGNlbGwpOworCisgICAgaWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUp
CisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmaW5mZXJyZWRUeXBl
LT5tX3N0cnVjdHVyZS0+bV9maW5hbGl6ZXIpOworfQorCitJbmZlcnJlZFR5cGU6OktpbmQgSW5m
ZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIHN3aXRj
aCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrKSB7CisgICAgY2FzZSBQdXRCeUlkUHJp
bWFyeVR5cGVTZWNvbmRhcnk6CisgICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU1hc2spIHsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbToK
KyAgICAgICAgICAgIHJldHVybiBCb3R0b207CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFy
eVR5cGVCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW47CisgICAgICAgIGNhc2Ug
UHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPdGhlcjsKKyAg
ICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJu
IEludDMyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyOgorICAgICAg
ICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0
cmluZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc7CisgICAgICAgIGNhc2UgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICBj
YXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVy
biBPYmplY3RPck90aGVyOworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wOgor
ICAgICAgICAgICAgcmV0dXJuIFRvcDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOwor
ICAgICAgICB9CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJl
OgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZTsKKyAgICBjYXNlIFB1dEJ5SWRQ
cmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICByZXR1cm4gT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICB9Cit9CisK
K0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZh
bHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAg
ICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgcmV0dXJuIE90aGVyOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJl
dHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51
bWJlcjsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0g
dmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5pc1N0cmluZygpKQorICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0
aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRo
U3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUb3A7Cit9CisKK0luZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0
QnlJZEZsYWdzIGZsYWdzKQoreworICAgIEtpbmQga2luZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkK
KyAgICAgICAgc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29k
ZVN0cnVjdHVyZUlEKGZsYWdzKSk7CisgICAgZWxzZQorICAgICAgICBzdHJ1Y3R1cmUgPSBudWxs
cHRyOworICAgIHJldHVybiBEZXNjcmlwdG9yKGtpbmQsIHN0cnVjdHVyZSk7Cit9CisKK1B1dEJ5
SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnB1dEJ5SWRGbGFncygpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEJvdHRvbToKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwg
UHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20pOworICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25k
YXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuKTsKKyAgICBjYXNlIE90aGVyOgorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVT
ZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyKTsKKyAgICBjYXNlIEludDMyOgor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5
cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyKTsKKyAgICBjYXNlIE51bWJl
cjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1h
cnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1iZXIpOworICAgIGNhc2Ug
U3RyaW5nOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlk
UHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyk7CisgICAg
Y2FzZSBPYmplY3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1
dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0KTsK
KyAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRC
eUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0T3JPdGhlcik7CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRT
ZWNvbmRhcnlUeXBlVG9wKTsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAgICAgICAgICAgUHV0QnlJZFBy
aW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZSB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0
dXJlLT5pZCgpKSk7CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlE
KG1fc3RydWN0dXJlLT5pZCgpKSk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFB1dEJ5SWROb25lOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6bWVyZ2UoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpCit7CisgICAgLy8gRmls
dGVyIG91dCBjb21tb24gdGhpbmdzIHRvIHNpbXBsaWZ5IHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJl
bG93LgorICAgIGlmICgqdGhpcyA9PSBvdGhlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChv
dGhlci5tX2tpbmQgPT0gQm90dG9tKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgQm90dG9tOgorICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuOgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAq
dGhpcyA9IFRvcDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3
aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToK
KyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgICp0
aGlzID0gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwgb3RoZXIuc3RydWN0
dXJlKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIEludDMy
OgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE51bWJlcjoK
KyAgICAgICAgICAgICp0aGlzID0gTnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6IC8vIElm
IHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4n
dCBtYXRjaC4KKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVj
dDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJl
T3JPdGhlcjoKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVy
ZSkgeworICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAg
ICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgT3RoZXI6CisgICAgICAgICAgICBtX2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgaWYgKG1f
c3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9y
T3RoZXI6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1
Y3R1cmVzIGRpZG4ndCBtYXRjaC4KKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAg
ICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIE90aGVyOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICBjYXNlIE9iamVjdDoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3Ro
ZXI6CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3Ro
ZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAq
dGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2Jq
ZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyOgorICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9w
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBUb3A6CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAg
ICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAg
IHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29s
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6c3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRvciBtZXJnZWQgPSAqdGhpczsKKyAgICBtZXJnZWQu
bWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAqdGhpcyA9PSBtZXJnZWQ7Cit9CisKK3ZvaWQgSW5m
ZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAg
IGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgb3V0LnByaW50KCI6IiwgaW5Db250ZXh0KCptX3N0
cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBu
dWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFR5cGUoVk0mIHZtKQorICAgIDog
QmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV93YXRjaHBv
aW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRU
eXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJlZFR5cGU6OmNhbldhdGNoKGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAg
aWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3ApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpID09IGV4cGVjdGVkOworfQorCitib29sIElu
ZmVycmVkVHlwZTo6Y2FuV2F0Y2goY29uc3QgRGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gY2FuV2F0Y2go
bG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2lu
dCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRv
cCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChs
b2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIs
IGRlc2NyaXB0b3IoKSk7Cit9CisKK2Jvb2wgSW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNs
b3coVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgRGVzY3JpcHRvciBt
eVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgRGVzY3JpcHRvciBvdGhlclR5cGUgPSBE
ZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7CisKKyAgICBteVR5cGUubWVyZ2Uob3RoZXJUeXBl
KTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9yKGxvY2tlcikgIT0gbXlUeXBlKTsgLy8gVGhlIHR5
cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgb24gdGhlIHNsb3cgcGF0aC4KKworICAgIHNl
dChsb2NrZXIsIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBteVR5cGUpOworCisgICAgcmV0dXJu
IGtpbmQobG9ja2VyKSAhPSBUb3A7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xv
dyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBzZXQobG9ja2VyLCB2bSwgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKCksIFRvcCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpzZXQoCisgICAgY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgb2ZmZW5kaW5nVmFsdWUsCisgICAgRGVzY3JpcHRvciBuZXdEZXNj
cmlwdG9yKQoreworICAgIC8vIFdlIHdpbGwgdHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBo
b2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHksIHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQg
dGhhdAorICAgIC8vIGNvdWxkIGNoYW5nZS4gSWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBk
ZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxkIGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXIgaW4gdGhlIGNhbGxlciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0
IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4ndCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZl
bnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkgY2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9u
J3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5l
d0Rlc2NyaXB0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRv
ciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJU
KG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVzY3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJ
ZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQg
Y2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMgbnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2Nr
ZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFT
U0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0
cnVjdHVyZSgpKTsKKworICAgIC8vIFdlIGFyZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBz
dXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRjaGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBu
b3cuIElmCisgICAgLy8gYW55b25lIGlzIHdhdGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8g
VG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlm
IChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAhPSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAg
Ly8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhl
biB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgorICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0
LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7CisKKyAgICAgICAgSW5mZXJyZWRUeXBlRmlyZURl
dGFpbCBkZXRhaWwoCisgICAgICAgICAgICB0aGlzLCBwcm9wZXJ0eU5hbWUudWlkKCksIGRlc2Ny
aXB0b3IobG9ja2VyKSwgbmV3RGVzY3JpcHRvciwgb2ZmZW5kaW5nVmFsdWUpOworICAgICAgICAK
KyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZG8gZXhwZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNv
bWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQgdG8gd2F0Y2ggdGhpcyB0eXBlIGFuZAorICAgICAg
ICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQuIEFzc3VtZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMg
Y3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFueSBtb3JlIHRoaW5ncyBmb3IKKyAgICAgICAgLy8g
aXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3IgPSBUb3A7CisKKyAgICAgICAgbV93YXRjaHBvaW50
U2V0LmZpcmVBbGwoZGV0YWlsKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZl
cnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgaWYgKCFu
ZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQorICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7
CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJyZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQg
b25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUg
c3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4KKyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlw
dG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJy
ZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50
KCZtX3N0cnVjdHVyZS0+bV93YXRjaHBvaW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRvciBraW5kLgorICAgIG1fa2luZCA9IG5ld0Rlc2Ny
aXB0b3Iua2luZCgpOworCisgICAgLy8gQXNzZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KKyAgICBB
U1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIElu
ZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICAvLyBGSVhNRTogRmluZCBhbiBl
bGVnYW50IGFuZCBjaGVhcCB3YXkgdG8gdGhyZWFkIGluZm9ybWF0aW9uIGFib3V0IHdoeSB3ZSBn
b3QgaGVyZSBpbnRvIHRoZSBmaXJlCisgICAgLy8gZGV0YWlsIGluIHNldCgpLgorICAgIAorICAg
IFZNJiB2bSA9ICpIZWFwOjpoZWFwKHRoaXMpLT52bSgpOworCisgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3Ig
PSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAgbmV3RGVzY3JpcHRvci5yZW1vdmVTdHJ1Y3R1cmUo
KTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2bSwgUHJvcGVydHlOYW1lKG51bGxwdHIpLCBKU1Zh
bHVlKCksIG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRT
dHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCit7Cisg
ICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVycmVkU3RydWN0dXJlID0KKyAgICAgICAgYml0d2lz
ZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4oCisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9GKEluZmVycmVkU3RydWN0dXJlLCBtX3dhdGNocG9p
bnQpKTsKKworICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJl
KCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcjo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZl
cnJlZFN0cnVjdHVyZSA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+
KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRP
RihJbmZlcnJlZFN0cnVjdHVyZSwgbV9maW5hbGl6ZXIpKTsKKworICAgIEFTU0VSVChIZWFwOjpp
c01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+bV9wYXJlbnQpKTsKKyAgICAKKyAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKGluZmVycmVkU3RydWN0dXJlLT5tX3N0cnVjdHVyZS5nZXQoKSkpCisgICAg
ICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisK
K0luZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2
bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogbV9w
YXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQor
eworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZl
cnJlZFR5cGU6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIElu
ZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgIG91dC5w
cmludCgiQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAg
IG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVk
VHlwZTo6U3RyaW5nOgorICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAg
IG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVjdHVyZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBv
dXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIk9iamVj
dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3Ro
ZXI6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRvcDoKKyAgICAgICAgb3V0LnByaW50KCJUb3AiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSW5mZXJyZWRUeXBlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlX2gKKworI2luY2x1
ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAi
UHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCisjaW5jbHVkZSAiV2F0
Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNl
ZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUgdHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCisK
K2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUo
Vk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lO
Rk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50OF90IHsKKyAgICAgICAgQm90dG9tLAorICAgICAg
ICBCb29sZWFuLAorICAgICAgICBPdGhlciwKKyAgICAgICAgSW50MzIsCisgICAgICAgIE51bWJl
ciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAgICAg
ICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciwKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBP
YmplY3RPck90aGVyLAorICAgICAgICBUb3AKKyAgICB9OworCisgICAgc3RhdGljIEtpbmQga2lu
ZEZvckZsYWdzKFB1dEJ5SWRGbGFncyk7CisgICAgCisgICAgc3RhdGljIGJvb2wgaGFzU3RydWN0
dXJlKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZU9yT3RoZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIERl
c2NyaXB0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVzY3JpcHRvcigpCisgICAgICAgICAg
ICA6IG1fa2luZChCb3R0b20pCisgICAgICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlc2NyaXB0b3IoS2luZCBraW5kLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIpCisgICAgICAgICAgICA6IG1fa2luZChraW5kKQor
ICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkpCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVj
dHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShK
U1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMgRGVzY3JpcHRvciBmb3JGbGFncyhWTSYsIFB1dEJ5
SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQgIT0gQm90dG9tIHx8IG1fc3RydWN0dXJl
OworICAgICAgICB9CisKKyAgICAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmU7IH0KKworICAgICAgICBQdXRCeUlkRmxhZ3MgcHV0QnlJZEZsYWdzKCkgY29uc3Q7CisK
KyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGluY2x1ZGVzVmFsdWUoSlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgICAgIGNh
c2UgQm90dG9tOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNh
c2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7Cisg
ICAgICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgICAgICAgICAgY2FzZSBOdW1iZXI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlzTnVtYmVyKCk7CisgICAgICAgICAgICBjYXNlIFN0
cmluZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmcoKTsKKyAgICAgICAg
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJl
OworICAgICAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKQorICAgICAgICAgICAgICAg
ICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09
IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5pc09iamVjdCgpOworICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVy
OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IHZh
bHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAgICBjYXNlIFRvcDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8
U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1cmUpIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
a2luZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBtZXJnZShjb25zdCBEZXNjcmlw
dG9yJik7CisgICAgICAgIHZvaWQgcmVtb3ZlU3RydWN0dXJlKCk7CisKKyAgICAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRvciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb3Ro
ZXIgb25lLgorICAgICAgICBib29sIHN1YnN1bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBjb25zdDsK
KworICAgICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5kOworICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0
dXJlOworICAgIH07CisKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gRGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJl
ID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAg
IERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yTWFpblRocmVhZCgpOworICAgIH0KKyAg
ICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9j
a2VyKTsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4gZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKTsgfQor
CisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBUb3A7IH0KKyAgICBi
b29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVycmVkVHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRl
ciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2YW50IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNj
cmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJlYWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNj
cmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRE
ZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7CisgICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNs
b3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIH0KKworICAgIC8vIEltbWVkaWF0ZWx5
IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50LgorICAgIHZvaWQgbWFrZVRvcChWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWFrZVRvcFNsb3codm0sIHByb3BlcnR5TmFtZSk7
CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5z
ZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlwZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRo
YXQKKyAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgVG9wLgorICAgIGJv
b2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNj
cmlwdG9yJik7CisgICAgYm9vbCBjYW5XYXRjaChjb25zdCBEZXNjcmlwdG9yJik7CisgICAgCisg
ICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwg
V2F0Y2hwb2ludCopOworICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJl
ZFR5cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRUeXBlKCk7CisKKyAgICBib29sIHdpbGxTdG9yZVZh
bHVlU2xvdyhWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xv
dyhWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgdm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYsIFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBEZXNjcmlwdG9yKTsKKyAgICB2b2lk
IHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xv
Y2s7CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBCb3R0b20gfTsKKworICAgIGNsYXNzIEluZmVy
cmVkU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRl
OworICAgIH07CisKKyAgICBjbGFzcyBJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplciA6IHB1Ymxp
YyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVk
U3RydWN0dXJlRmluYWxpemVyKCkgeyB9CisgICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIElu
ZmVycmVkU3RydWN0dXJlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
cHVibGljOgorICAgICAgICBJbmZlcnJlZFN0cnVjdHVyZShWTSYsIEluZmVycmVkVHlwZSogcGFy
ZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9OworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEluZmVycmVkVHlwZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVk
U3RydWN0dXJlV2F0Y2hwb2ludDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3RydWN0
dXJlRmluYWxpemVyOworICAgICAgICAKKyAgICAgICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVudDsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAgICAg
SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50IG1fd2F0Y2hwb2ludDsKKyAgICAgICAgSW5mZXJy
ZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgbV9maW5hbGl6ZXI7CisgICAgfTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RFOiBJ
ZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdlIHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0
IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBiZQorICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2gg
aXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2
ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAgLy8gdGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRo
ZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5nIHRoYXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxpbmVX
YXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxl
LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25z
dCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFibGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZVRh
YmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKKwor
SW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQorewor
ICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVhcCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsKKyAg
ICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZl
cnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5
cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVycmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJs
ZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGVU
YWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBqc0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxs
KTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGluZmVycmVkVHlwZVRhYmxlLT5t
X2xvY2spOworICAgIAorICAgIGZvciAoYXV0byYgZW50cnkgOiBpbmZlcnJlZFR5cGVUYWJsZS0+
bV90YWJsZSkgeworICAgICAgICBpZiAoIWVudHJ5LnZhbHVlKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXNSZWxldmFudCgpKQorICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJmVudHJ5LnZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZW50cnkudmFsdWUuY2xlYXIoKTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRU
eXBlVGFibGU6OmdldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3RhYmxlLmZpbmQodWlkKTsKKyAgICBpZiAo
aXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcHJ1bmUgaW52YWxpZGF0
ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVyLT52YWx1ZS0+aXNSZWxldmFudCgpKSB7CisgICAgICAg
IGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQoKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJl
ZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICByZXR1cm4gZ2V0KGxvY2tlciwgdWlkKTsK
K30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIGdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworfQor
Citib29sIEluZmVycmVkVHlwZVRhYmxlOjp3aWxsU3RvcmVWYWx1ZSgKKyAgICBWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFN0b3JlZFByb3BlcnR5QWdl
IGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRo
YXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICAKKyAgICBpZiAo
YWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9
IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBt
X3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKyAgICAgICAgCisgICAgICAgIGlmIChpdGVy
LT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRSZXN1
bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBX
cml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigpKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5KSB7CisgICAgICAgIEluZmVycmVkVHlwZSogaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRU
eXBlOjpjcmVhdGUodm0pOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldCh2bSwgdGhpcywgaW5mZXJyZWRUeXBlKTsKKyAg
ICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPndpbGxTdG9yZVZhbHVl
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3Jp
dGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVz
IHRoZSBoYXNoIG1hcC4KKyAgICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFRh
YmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkp
OworICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybjsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRvcC4KKworICAgICAg
ICBpdGVyLT52YWx1ZS0+bWFrZVRvcCh2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgaXRlci0+
dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRhYmxlVHlwZTo6
QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgICAgIHJlc3VsdCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZS51
aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVkVHlwZT4oKSk7CisgICAgfQorICAgIGlmICghcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPm1ha2VUb3Aodm0sIHByb3BlcnR5TmFtZSk7CisgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworfQorCitJbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRU
eXBlVGFibGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1
Y3R1cmUuZ2V0KCkpCit7Cit9CisKK0luZmVycmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFi
bGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUg
SW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMg
aXMgYSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNpbXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVz
dHJ1Y3RvciBhbmQgbWFrZXMgbGlmZXRpbWUgZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUs
IHNpbmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJl
IGRlbGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBydW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20g
UHJvcGVydHlUYWJsZSBiZWNhdXNlIG1vc3QgcHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBh
biBJbmZlcnJlZFR5cGUsIHNpbmNlIG1vc3QgcHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVz
IChpZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVydHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBp
biBzb21lIFN0cnVjdHVyZSIpLiBBbHNvLCB0aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUg
dHlwZXMgb2YgcHJvcGVydGllcyBmcm9tCisvLyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlm
IHRoZSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCBkaXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2Ns
YXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSog
Y3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xv
Y2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0
eSgpOyB9CisKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBu
dWxscHRyIGZvciBib3RoIFRvcCBhbmQgQm90dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUK
KyAgICAvLyBvd25pbmcgU3RydWN0dXJlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHku
CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1
ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJyZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwq
KTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChQcm9wZXJ0eU5hbWUpOworCisgICAgZW51bSBTdG9y
ZWRQcm9wZXJ0eUFnZSB7CisgICAgICAgIE5ld1Byb3BlcnR5LAorICAgICAgICBPbGRQcm9wZXJ0
eQorICAgIH07CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUg
Zm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwgcmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdz
IG5vdAorICAgIC8vIHJlbGV2YW50IGlmIGl0J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3
aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVudHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1
ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCisgICAg
Ly8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRl
dGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChW
TSYsIFByb3BlcnR5TmFtZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCitwcml2YXRlOgorICAgIElu
ZmVycmVkVHlwZVRhYmxlKFZNJik7CisgICAgfkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICAv
LyBCb3R0b206IGFic2VuY2UgZnJvbSB0YWJsZS4KKyAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4g
dGFibGUsICF2YWx1ZS0+aXNSZWxldmFudCgpLCBvciBhYnNlbmNlIGZyb20gdGFibGUuCisgICAg
Ly8KKyAgICAvLyBXZSBrbm93IGhvdyB0byBkZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0
YWJsZSBpcyBib3R0b20gb3IgdG9wIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIC8vIHBy
b3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIG93bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRp
bmcgb24gdGhlIHN0cnVjdHVyZSwgYWJzZW5jZSBtYXkgaGF2ZQorICAgIC8vIGRpZmZlcmVudCBt
ZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRoaXMgY2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5n
IHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJvcGVydHkKKyAgICAvLyBpcyB0aGF0IHdlIGRpZmZl
cmVudGlhdGUgYmV0d2VlbiBhY3Rpb25zOiByZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3Jl
IGFkZGluZyBhIG5ldyBwcm9wZXJ0eQorICAgIC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNl
IG1lYW5zIGJvdHRvbS4gSWYgd2UncmUgc3RvcmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAo
cmVwbGFjZSksIHRoZW4KKyAgICAvLyBhYnNlbmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdv
cmssIHdlIGhhdmUgdG8gd2F0Y2ggb3V0IGZvciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJl
cywgUzEgYW5kCisgICAgLy8gUzIsIHNoYXJlIHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFu
ZCBuZWl0aGVyIG9mIHRoZW0gaW5pdGlhbGx5IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5
CisgICAgLy8gd2FudCB0byBhZGQgUCB3aXRob3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQg
dG8gYWRkIFAgd2l0aCBhIHR5cGUuIElmIFMxIGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAg
IC8vIHRvIGluZGljYXRlIFRvcCwgdGhlbiBTMiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1l
YW4gQm90dG9tIGFuZCB3b3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50
cnkgaW4gdGhlIHRhYmxlLiBUaGVuIFMxIHdvdWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3As
IGFuZCB3b3VsZCB1c2UgUzIncyB0eXBlLiBDbGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdl
IGF2b2lkIHN1Y2ggY29uZnVzaW9uIGJ5IGVuc3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5
cyBhZGRzIGFuIGVudHJ5LiBIZW5jZSwKKyAgICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5
IGNvbWVzIGludG8gcGxheSBmb3IgcHJvcGVydGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVk
VHlwZVRhYmxlIHdhcworICAgIC8vIGNyZWF0ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlm
aWVyUmVwSGFzaCwgSGFzaFRyYWl0czxVbmlxdWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7Cisg
ICAgCisgICAgVGFibGVUeXBlIG1fdGFibGU7CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBs
b2NrIHdoZW4gd2UncmUgZG9pbmcgbW9kaWZpY2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9y
IHJlYWRzIG9uIHRoZSBjb21waWxlcgorICAgIC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVh
ZCBpcyBub3QgYWxsb3dlZCB0byBkbyBtb2RpZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRM
b2NrIG1fbG9jazsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJy
ZWRUeXBlVGFibGVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKSB7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkp
OworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0
KSB7CkBAIC0xMjI3LDI5ICsxMjI5LDQwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbnRlcm5hbCgKIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3Vy
cmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0g
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIG9mZnNldCkpIHsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAg
ICAgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgaWYg
KG5ld1N0cnVjdHVyZSkgeworICAgICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9y
VHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNv
bnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAKICAgICAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IGJ1dHRlcmZseSgpOwotICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAh
PSB0aGlzLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOworICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAh
PSB0aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAg
ICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CisgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAg
ICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAg
ICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKICAgICBp
ZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1v
ZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAg
IHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWQpOworICAgICAgICB9CisKICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAK
QEAgLTEyNjgsMTYgKzEyODEsMTkgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogICAgIC8vIHdlIHdhbnQuCiAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKICAgICAKLSAgICBzdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdh
dGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7Cisg
ICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWQpOwogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJU
KHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOworICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgc2V0U3RydWN0dXJlQW5k
UmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlz
LCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVj
dHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgbmV3U3RydWN0
dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xMzM1LDggKzEzNTEsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVj
dFdpdGhvdXRUcgogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KCk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkK
ICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZM
aW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCks
IG5ld0J1dHRlcmZseSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUoKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAgYm9v
bCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOworICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVG
b3JUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Cisg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxODk5MjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTAsMTEgKzM1MCwxNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlz
LCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJl
ZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUo
KTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91
cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2
aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1
cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQorICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJy
ZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zm
c2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0K
ICAgICAKQEAgLTQ2NCw2ICs0NjgsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmli
dXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlv
biwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAg
IHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKKyAgICB0cmFuc2l0
aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRyYW5z
aXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIApAQCAtNDc5LDYgKzQ4
NCwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAKIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQm
IG9mZnNldCkKIHsKKyAgICAvLyBOT1RFOiBUaGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMgd2h5
IHRoaXMgZ29lcyBkaXJlY3RseSB0byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IHJhdGhlciB0aGFu
CisgICAgLy8gY2FjaGluZyB0aGUgcmVtb3ZhbC4gV2UgY2FuIGZpeCBhbGwgb2YgdGhlc2UgdGhp
bmdzLCBidXQgd2UgbXVzdCByZW1lbWJlciB0byBkbyBzbywgaWYgd2UgZXZlciB0cnkKKyAgICAv
LyB0byBvcHRpbWl6ZSB0aGlzIGNhc2UuCisgICAgLy8KKyAgICAvLyAtIENhY2hlZCB0cmFuc2l0
aW9ucyB1c3VhbGx5IHN0ZWFsIHRoZSBwcm9wZXJ0eSB0YWJsZSwgYW5kIGFzc3VtZSB0aGF0IHRo
aXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGV5CisgICAgLy8gICBjYW4ganVzdCByZWJ1aWxkIHRo
ZSB0YWJsZSBieSBsb29raW5nIGF0IHBhc3QgdHJhbnNpdGlvbnMuIFRoYXQgY29kZSBhc3N1bWVz
IHRoYXQgdGhlIHRhYmxlIG9ubHkKKyAgICAvLyAgIGdyZXcgYW5kIG5ldmVyIHNocmFuay4gVG8g
c3VwcG9ydCByZW1vdmFscywgd2UnZCBoYXZlIHRvIGNoYW5nZSB0aGUgcHJvcGVydHkgdGFibGUg
bWF0ZXJpYWxpemF0aW9uCisgICAgLy8gICBjb2RlIHRvIGhhbmRsZSBkZWxldGlvbnMuIEFsc28s
IHdlIGhhdmUgbG9naWMgdG8gZ2V0IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgb24gYSBzdHJ1Y3R1
cmUgdGhhdAorICAgIC8vICAgbGFja3MgYSBwcm9wZXJ0eSB0YWJsZSBieSBqdXN0IGxvb2tpbmcg
YmFjayB0aHJvdWdoIHRoZSBzZXQgb2YgdHJhbnNpdGlvbnMgc2luY2UgdGhlIGxhc3QKKyAgICAv
LyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBpbm5lZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBh
bHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBoYW5kbGUgY2FjaGVkCisgICAgLy8gICByZW1vdmFs
cy4KKyAgICAvLworICAgIC8vIC0gSW5mZXJyZWRUeXBlVGFibGUgYXNzdW1lcyB0aGF0IHJlbW92
YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSBpZiB3ZSBjb3Vs
ZAorICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVydHkgYW5kIHRoZW4gcmUtYWRkIGl0IGxhdGVyLCB0
aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3AiIG9wdGltaXphdGlvbiB3b3VsZG4ndAorICAgIC8v
ICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVtb3ZhbCBhbHNvIGVpdGhlciBwb2lzb25lZCB0eXBl
IGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRoaW5nIGVxdWl2YWxlbnQgdG8KKyAgICAvLyAgIGhh
c0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJvbmdseSBtYXJraW5nIHRoZSBlbnRyeSBhcyBUb3Ag
YnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QgYWJzZW50LCBidXQKKyAgICAvLyAgIGluc3RlYWQs
IGhhcyBhIG51bGwgZW50cnkuCisgICAgCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtODQxLDYgKzg2
NCw0MyBAQCB2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvCiAgICAgc2V0
RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjp3
aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplLAorICAgIEluZmVycmVkVHlwZVRh
YmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2UpCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygp
KTsKKyAgICBBU1NFUlQoIWhhc0JlZW5EaWN0aW9uYXJ5KCkpOworCisgICAgLy8gQ3JlYXRlIHRo
ZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBzbyB0aGF0
IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUgYWxyZWFkeQorICAgIC8vIGdyYWJiZWQgYSBwb2lu
dGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4KKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUg
PSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOworICAgIGlmICghdGFibGUpIHsKKyAgICAgICAg
dGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9pbmZlcnJlZFR5cGVUYWJsZS5zZXQodm0sIHRoaXMs
IHRhYmxlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEg
cHJvcGVydHkgdGFibGUuCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKKyAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOworCisg
ICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdp
dmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0IHdhcyBwcmVzZW50CisgICAgLy8gYWxy
ZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEgcHJvcGVydHkgdGFibGUgbm93LgorICAgIEFTU0VSVChw
cm9wZXJ0eVRhYmxlKTsKKworICAgIC8vIC4uLiBhbmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJl
c2VudC4KKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChw
cm9wZXJ0eU5hbWUudWlkKCkpOworICAgIEFTU0VSVChlbnRyeSk7CisKKyAgICBpZiAoc2hvdWxk
T3B0aW1pemUpCisgICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2lsbFN0
b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFnZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIHRhYmxlLT5tYWtlVG9wKHZtLCBwcm9wZXJ0eU5hbWUsIGFnZSk7CisgICAgICAgIGVudHJ5
LT5oYXNJbmZlcnJlZFR5cGUgPSBmYWxzZTsKKyAgICB9Cit9CisKICNpZiBEVU1QX1BST1BFUlRZ
TUFQX1NUQVRTCiAKIFByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMqIHByb3BlcnR5TWFwSGFzaFRh
YmxlU3RhdHMgPSAwOwpAQCAtMTA1OCw2ICsxMTE4LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJv
cGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5z
YWZlLmNsZWFyKCk7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbmZlcnJl
ZFR5cGVUYWJsZSk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE4OTkyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRl
ICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRl
ICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKQEAgLTgxLDExICs4MiwxMyBAQCBzdHJ1
Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGtleTsKICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdWludDhfdCBhdHRyaWJ1dGVzOworICAgIGJvb2wg
aGFzSW5mZXJyZWRUeXBlOyAvLyBUaGlzIGNhY2hlcyB3aGV0aGVyIG9yIG5vdCBhIHByb3BlcnR5
IGhhcyBhbiBpbmZlcnJlZCB0eXBlIGluIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlLCBhbmQgaXMg
dXNlZCBmb3IgYSBmYXN0IGNoZWNrIGluIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgpLgog
CiAgICAgUHJvcGVydHlNYXBFbnRyeSgpCiAgICAgICAgIDoga2V5KG51bGxwdHIpCiAgICAgICAg
ICwgb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcygwKQorICAgICAg
ICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTMsNiAr
OTYsNyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgICAgIDoga2V5KGtleSkKICAg
ICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykK
KyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUoZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
dGhpcy0+YXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVzKTsKICAgICB9CkBAIC0zMjMsNiArMzI3LDcg
QEAgcHVibGljOgogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpOwogCiAgICAgLy8gVGhpcyBp
cyBhIHNvbWV3aGF0IGludGVybmFsaXNoIG1ldGhvZC4gSXQgd2lsbCBjYWxsIHlvdXIgZnVuY3Rv
ciB3aGlsZSBwb3NzaWJseSBob2xkaW5nIHRoZQogICAgIC8vIFN0cnVjdHVyZSdzIGxvY2suIFRo
ZXJlIGlzIG5vIGd1YXJhbnRlZSB3aGV0aGVyIHRoZSBsb2NrIGlzIGhlbGQgb3Igbm90IGluIGFu
eSBwYXJ0aWN1bGFyCkBAIC00ODEsNiArNDg2LDQwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsK
ICAgICB9CiAKKyAgICBib29sIGhhc0luZmVycmVkVHlwZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEhbV9pbmZlcnJlZFR5cGVUYWJsZTsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5
cGUqIGluZmVycmVkVHlwZUZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAg
ICAgaWYgKEluZmVycmVkVHlwZVRhYmxlKiB0YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0
KCkpCisgICAgICAgICAgICByZXR1cm4gdGFibGUtPmdldCh1aWQpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRU
eXBlRGVzY3JpcHRvckZvcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAg
aWYgKEluZmVycmVkVHlwZSogcmVzdWx0ID0gaW5mZXJyZWRUeXBlRm9yKHVpZCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LT5kZXNjcmlwdG9yKCk7CisgICAgICAgIHJldHVybiBJbmZlcnJl
ZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFs
dWVGb3JUcmFuc2l0aW9uKAorICAgICAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBp
ZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAoIXNob3VsZE9wdGltaXplICYmICFtX2luZmVycmVk
VHlwZVRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVT
bG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBl
VGFibGU6Ok5ld1Byb3BlcnR5KTsKKyAgICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxT
dG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAgICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZE9wdGltaXplKQorICAgIHsKKyAgICAg
ICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1p
emUsIEluZmVycmVkVHlwZVRhYmxlOjpPbGRQcm9wZXJ0eSk7CisgICAgfQorCiAgICAgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFwZShKU1ZhbHVlKTsKICAgICAKICAg
ICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28gc3RydWN0dXJlcyBtYXRjaCBlbm91Z2ggdGhhdCB0
aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBhbGxvY2F0aW9ucwpAQCAtNjMyLDYgKzY3MSw5IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVz
KFZNJik7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdpbGxTdG9yZVZhbHVlU2xvdygK
KyAgICAgICAgVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wsIEluZmVycmVkVHlwZVRh
YmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSk7CisKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJh
bnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9u
TGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKQEAgLTY1NSw2ICs2OTcsOCBAQCBwcml2
YXRlOgogICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4g
RHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCiAgICAgV3Jp
dGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIAorICAgIFdy
aXRlQmFycmllcjxJbmZlcnJlZFR5cGVUYWJsZT4gbV9pbmZlcnJlZFR5cGVUYWJsZTsKKwogICAg
IG11dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0Owog
CiAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RPdXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0X2ZpdHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3JlZFBy
b3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8o
KSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwotICAgIGlmICghcHJvcGVy
dHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU1h
cEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwot
ICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlkT2Zmc2V0OworICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJu
IGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogfQog
ICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogeworICAg
IGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKK30KKworQUxXQVlTX0lOTElORSBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJbmZlcnJlZFR5cGUpCit7CiAgICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAtMTAxLDYgKzEwMSw3IEBAIEFMV0FZU19JTkxJTkUg
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7CisgICAgaGFzSW5mZXJyZWRU
eXBlID0gZW50cnktPmhhc0luZmVycmVkVHlwZTsKICAgICByZXR1cm4gZW50cnktPm9mZnNldDsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTg5
OTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIK
KyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCkBA
IC0yNDEsNiArMjQyLDggQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJl
ZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJy
ZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlv
blJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZXhj
ZXB0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgRXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhp
cywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTg5OTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAt
MzAyLDYgKzMwMiw4IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRh
YmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CisgICAgU3Ry
b25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBlU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1
bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXhjZXB0aW9u
U3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVy
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLW9i
amVjdC10aGVuLXN0cmluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1vYmplY3QtdGhlbi1zdHJpbmcuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1vYmplY3Qt
dGhlbi1zdHJpbmcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24g
Zm9vKG8pIHsKKyAgICByZXR1cm4gby5mID09IHt0b1N0cmluZzpmdW5jdGlvbigpIHsgcmV0dXJu
ICJoZWxsbyI7IH19OworfQorCitmdW5jdGlvbiBiYXIobywgdikgeworICAgIG8uZiA9IHY7Cit9
CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCit2YXIgbyA9IHt9OworZm9yICh2
YXIgaSA9IDA7IGkgPCA1OyArK2kpCisgICAgYmFyKG8sIHt9KTsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVz
dWx0ICE9PSBmYWxzZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfQorCitiYXIobywgImhlbGxvIik7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJl
c3VsdCAhPT0gdHJ1ZSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsg
cmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5
cGUtc3RyaW5nLXRoZW4tb2JqZWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cmluZy10aGVuLW9iamVjdC5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0
cmluZy10aGVuLW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACitmdW5j
dGlvbiBmb28obykgeworICAgIHJldHVybiBvLmYgKyAiIHdvcmxkIjsKK30KKworZnVuY3Rpb24g
YmFyKG8sIHYpIHsKKyAgICBvLmYgPSB2OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUo
YmFyKTsKKwordmFyIG8gPSB7fTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKQorICAgIGJh
cihvLCAiaGVsbG8iKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAg
dmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVzdWx0ICE9ICJoZWxsbyB3b3JsZCIpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworYmFyKG8s
IHt0b1N0cmluZzogZnVuY3Rpb24oKSB7IHJldHVybiAiaGVsbG8iOyB9fSk7Cit2YXIgcmVzdWx0
ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPSAiaGVsbG8gd29ybGQiKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTg5OTI5
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgcHJvcGVydHkgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODYxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RG
OjpIYXNoVGFibGVBZGRSZXN1bHQ6Okhhc2hUYWJsZUFkZFJlc3VsdCk6IE1ha2UgaXQgcG9zc2li
bGUgdG8gc2F5ICJIYXNoTWFwOjpBZGRSZXN1bHQgcmVzdWx0IiB3aXRob3V0IGFzc2lnbmluZyBh
bnl0aGluZyB0byBpdCB5ZXQuCisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmg6CisgICAgICAg
IChXVEY6OnByaW50SW50ZXJuYWwpOiBCZWVmIHVwIHByaW50aW5nIG9mIHNvbWUgY29tbW9uIFdU
RiB0eXBlcywgaW4gcGFydGljdWxhciBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LgorCiAyMDE1
LTA5LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBT
aGFkb3dSb290IGludGVyZmFjZSBhbmQgRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTg5OTI5KQorKysgU291cmNlL1dURi93dGYvSGFz
aFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPiBzdHJ1Y3Qg
SGFzaFRhYmxlQWRkUmVzdWx0IHsKKyAgICAgICAgSGFzaFRhYmxlQWRkUmVzdWx0KCkgOiBpc05l
d0VudHJ5KGZhbHNlKSB7IH0KICAgICAgICAgSGFzaFRhYmxlQWRkUmVzdWx0KEl0ZXJhdG9yVHlw
ZSBpdGVyLCBib29sIGlzTmV3RW50cnkpIDogaXRlcmF0b3IoaXRlciksIGlzTmV3RW50cnkoaXNO
ZXdFbnRyeSkgeyB9CiAgICAgICAgIEl0ZXJhdG9yVHlwZSBpdGVyYXRvcjsKICAgICAgICAgYm9v
bCBpc05ld0VudHJ5OwpJbmRleDogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCShyZXZpc2lvbiAxODk5MjkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmF3UG9pbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpA
QCAtNzQsMTIgKzc1LDE0IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwo
UHIKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBj
b25zdCBTdHJpbmdJbXBsKik7CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0
LCBiaXR3aXNlX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwq
IHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBiaXR3aXNlX2Nhc3Q8Y29uc3QgU3RyaW5nSW1w
bCo+KHZhbHVlKSk7IH0KK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCAm
dmFsdWUpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNo
YXIqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
dmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBD
U3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1N0
cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgU3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29u
c3QgU3RyaW5nJj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJ
bnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqPih2YWx1ZSkp
OyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
VW5pcXVlZFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9CitpbmxpbmUgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFVuaXF1ZWRTdHJpbmdJbXBsJiB2YWx1ZSkgeyBwcmludEludGVy
bmFsKG91dCwgJnZhbHVlKTsgfQogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIGJvb2wpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIHNpZ25lZCBjaGFyKTsgLy8gTk9URTogdGhpcyBwcmludHMgYXMg
YSBudW1iZXIsIG5vdCBhcyBhIGNoYXJhY3RlcjsgdXNlIENoYXJhY3RlckR1bXAgaWYgeW91IHdh
bnQgdGhlIGNoYXJhY3RlcgogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOyAvLyBOT1RFOiBzZWUgYWJvdmUuCkBAIC0xNjks
NiArMTcyLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb24KICAg
ICBvdXQucHJpbnQocG9pbnRlckR1bXAodmFsdWUuZ2V0KCkpKTsKIH0KIAordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBSZWZQ
dHI8VD4mIHZhbHVlKQoreworICAgIG91dC5wcmludChwb2ludGVyRHVtcCh2YWx1ZS5nZXQoKSkp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogY2xhc3MgVmFsdWVJbkNv
bnRleHQgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261675</attachid>
            <date>2015-09-21 12:09:40 -0700</date>
            <delta_ts>2015-09-21 12:09:40 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>236498</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzMyBA
QAorMjAxNS0wOS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgcHJvcGVydHkgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODYxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGJyaW5ncyByZWN1cnNpdmUgdHlw
ZSBpbmZlcmVuY2UgdG8gSmF2YVNjcmlwdCBvYmplY3QgcHJvcGVydGllcyBpbiBKU0MuIFdlIGNo
ZWNrIHRoYXQgYQorICAgICAgICB2YWx1ZSBiZWluZyBzdG9yZWQgaW50byBhIHByb3BlcnR5IG9i
ZXlzIGEgcHJvcGVydHkncyB0eXBlIGJlZm9yZSB3ZSBkbyB0aGUgc3RvcmUuIElmIGl0IGRvZXNu
J3QsCisgICAgICAgIHdlIGJyb2FkZW4gdGhlIHByb3BlcnR5J3MgdHlwZSB0byBpbmNsdWRlIHRo
ZSBuZXcgdmFsdWUuIElmIG9wdGltaXplZCBjb2RlIHdhcyByZWx5aW5nIG9uIHRoZSBvbGQKKyAg
ICAgICAgdHlwZSwgd2UgZGVvcHRpbWl6ZSB0aGF0IGNvZGUuCisKKyAgICAgICAgVGhlIHR5cGUg
c3lzdGVtIHRoYXQgdGhpcyBzdXBwb3J0cyBpbmNsdWRlcyBpbXBvcnRhbnQgcHJpbWl0aXZlIHR5
cGVzIGxpa2UgSW50MzIgYW5kIEJvb2xlYW4uIEJ1dAorICAgICAgICBpdCBnb2VzIGZ1cnRoZXIg
YW5kIGFsc28gaW5jbHVkZXMgYSB0eXBlIGtpbmQgY2FsbGVkIE9iamVjdFdpdGhTdHJ1Y3R1cmUs
IHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAgICAgZXhwZWN0IHRoZSBwcm9wZXJ0eSB0byBhbHdh
eXMgcG9pbnQgdG8gb2JqZWN0cyB3aXRoIGEgcGFydGljdWxhciBzdHJ1Y3R1cmUuIFRoaXMgb25s
eSB3b3JrcyBmb3IKKyAgICAgICAgbGVhZiBzdHJ1Y3R1cmVzIChpLmUuIHN0cnVjdHVyZXMgdGhh
dCBoYXZlIGEgdmFsaWQgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHNldCkuIEludmFsaWRhdGlvbiBv
ZiB0aGUKKyAgICAgICAgdHJhbnNpdGlvbiBzZXQgY2F1c2VzIHRoZSBwcm9wZXJ0eSB0eXBlIHRv
IGJlY29tZSBPYmplY3QgKG1lYW5pbmcgYW4gb2JqZWN0IHdpdGggYW55IHN0cnVjdHVyZSkuCisg
ICAgICAgIFRoaXMgY2FwYWJpbGl0eSBnaXZlcyB1cyByZWN1cnNpdmUgdHlwZSBpbmZlcmVuY2Uu
IEl0J3MgcG9zc2libGUgZm9yIGFuIGV4cHJlc3Npb24gbGlrZSAiby5mLmcuaCIKKyAgICAgICAg
dG8gZXhlY3V0ZSB3aXRob3V0IGFueSB0eXBlIGNoZWNrcyBpZiAuZiBhbmQgLmcgYXJlIGJvdGgg
T2JqZWN0V2l0aFN0cnVjdHVyZS4KKworICAgICAgICBUaGUgdHlwZSBpbmZlcmVuY2Ugb2YgYSBw
cm9wZXJ0eSBpcyB0cmFja2VkIGJ5IGFuIEluZmVycmVkVHlwZSBpbnN0YW5jZSwgd2hpY2ggaXMg
YSBKU0NlbGwuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCBpdCBtYW5hZ2VzIGl0cyBvd24gbWVt
b3J5LiBUaGF0J3MgY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIERGRyBpcyBpbnRl
cmVzdGVkIGluCisgICAgICAgIG9uZSBvZiB0aGVzZSwgaXQgY2FuIGp1c3QgbGlzdCB0aGUgSW5m
ZXJyZWRUeXBlIGFzIGEgd2VhayByZWZlcmVuY2UgaW4gYWRkaXRpb24gdG8gc2V0dGluZyBhCisg
ICAgICAgIHdhdGNocG9pbnQuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgdGhlIEluZmVycmVk
VHlwZSBpcyBkcm9wcGVkIGJ5IHRoZSBvd25pbmcgc3RydWN0dXJlLCB0aGUgREZHCisgICAgICAg
IHdvbid0IHJlYWQgYSBkYW5nbGluZyBwb2ludGVyLiBBIG1hcHBpbmcgZnJvbSBwcm9wZXJ0eSBu
YW1lIHRvIEluZmVycmVkVHlwZSBpcyBpbXBsZW1lbnRlZCBieQorICAgICAgICBJbmZlcnJlZFR5
cGVUYWJsZSwgd2hpY2ggaXMgYWxzbyBhIEpTQ2VsbC4gRWFjaCBTdHJ1Y3R1cmUgbWF5IHBvaW50
IHRvIHNvbWUgSW5mZXJyZWRUeXBlVGFibGUuCisKKyAgICAgICAgVGhpcyBmZWF0dXJlIGNhdXNl
cyBwcm9ncmFtcyB0byBiZSBoYXBwaWVyIChydW4gZmFzdGVyIHdpdGhvdXQgb3RoZXJ3aXNlIGRv
aW5nIGJhZCB0aGluZ3MgbGlrZQorICAgICAgICB1c2luZyBsb3RzIG9mIG1lbW9yeSkgd2hlbiBm
b3VyIGNvbmRpdGlvbnMgaG9sZDoKKworICAgICAgICAxKSBBIHByb3BlcnR5IGNvbnZlcmdlcyB0
byBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgd2Ugc3VwcG9ydC4KKyAgICAgICAgMikgVGhlIHByb3Bl
cnR5IGlzIGxvYWRlZCBmcm9tIG1vcmUgZnJlcXVlbnRseSB0aGFuIGl0IGlzIHN0b3JlZCB0by4K
KyAgICAgICAgMykgVGhlIHN0b3JlcyBhcmUgYWxsIGNhY2hlZCwgc28gdGhhdCB3ZSBzdGF0aWNh
bGx5IGVtaXQgYSB0eXBlIGNoZWNrLgorICAgICAgICA0KSBXZSBkb24ndCBhbGxvY2F0ZSBhIGxv
dCBvZiBtZXRhLWRhdGEgZm9yIHRoZSBwcm9wZXJ0eSdzIHR5cGUuCisKKyAgICAgICAgV2UgbWF4
aW1pemUgdGhlIGxpa2VsaWhvb2Qgb2YgKDEpIGJ5IGhhdmluZyBhIHJpY2ggdHlwZSBzeXN0ZW0u
IEJ1dCBoYXZpbmcgYSByaWNoIHR5cGUgc3lzdGVtIG1lYW5zCisgICAgICAgIHRoYXQgYSByZWZs
ZWN0aXZlIHB1dCB0byBhIHByb3BlcnR5IGhhcyB0byBoYXZlIGEgbGFyZ2Ugc3dpdGNoIG92ZXIg
dGhlIGluZmVycmVkIHR5cGUgdG8gZGVjaWRlIGhvdworICAgICAgICB0byBkbyB0aGUgdHlwZSBj
aGVjay4gVGhhdCdzIHdoeSB3ZSBuZWVkICgzKS4gV2UgZW5zdXJlICgzKSBieSBoYXZpbmcgZXZl
cnkgcmVmbGVjdGl2ZSBwcm9wZXJ0eQorICAgICAgICBzdG9yZSAoaS5lLiBwdXREaXJlY3RJbnRl
cm5hbCBpbiBhbnkgY29udGV4dCB0aGF0IGlzbid0IFB1dEJ5SWQpIGZvcmNlIHRoZSBpbmZlcnJl
ZCB0eXBlIHRvIGJlY29tZQorICAgICAgICBUb3AuIFdlIGRvbid0IHJlYWxseSB3b3JyeSBhYm91
dCBlbnN1cmluZyAoMik7IHRoaXMgaXMgc3RhdGlzdGljYWxseSB0cnVlIGZvciBtb3N0IHByb2dy
YW1zCisgICAgICAgIGFscmVhZHkuCisKKyAgICAgICAgUHJvYmFibHkgdGhlIG1vc3Qgc3VidGxl
IHRyaWNrZXJ5IGdvZXMgaW50byAoNCkuIExvZ2ljYWxseSB3ZSdkIGxpa2UgdG8gc2F5IHRoYXQg
ZWFjaAorICAgICAgICAoU3RydWN0dXJlLCBQcm9wZXJ0eSkgbWFwcyB0byBpdHMgb3duIEluZmVy
cmVkVHlwZS4gSWYgc3RydWN0dXJlIFMxIGhhcyBhIHRyYW5zaXRpb24gZWRnZSB0byBTMiwKKyAg
ICAgICAgdGhlbiB3ZSBjb3VsZCBlbnN1cmUgdGhhdCB0aGUgSW5mZXJyZWRUeXBlIEkxIHdoZXJl
IChTMSwgUHJvcGVydHkpLT5JMSBoYXMgYSBkYXRhIGZsb3cgY29uc3RyYWludAorICAgICAgICB0
byBJMiB3aGVyZSAoUzIsIFByb3BlcnR5KS0+STIuIFRoYXQgd291bGQgd29yaywgYnV0IGl0IHdv
dWxkIGludm9sdmUgYSBsb3Qgb2YgbWVtb3J5LiBBbmQgd2hlbiBJMQorICAgICAgICBnZXRzIGlu
dmFsaWRhdGVkIGluIHNvbWUgd2F5LCBpdCB3b3VsZCBoYXZlIHRvIHRlbGwgSTIgYWJvdXQgaXQs
IGFuZCB0aGVuIEkyIG1pZ2h0IHRlbGwgb3RoZXIKKyAgICAgICAgSW5mZXJyZWRUeXBlIG9iamVj
dHMgZG93bnN0cmVhbS4gVGhhdCdzIG1hZG5lc3MuIFNvLCB0aGUgZmlyc3QgbWFqb3IgY29tcHJv
bWlzZSB0aGF0IHdlIG1ha2UgaGVyZQorICAgICAgICBpcyB0byBzYXkgdGhhdCBpZiBzb21lIHBy
b3BlcnR5IGhhcyBzb21lIEluZmVycmVkVHlwZSBhdCBzb21lIFN0cnVjdHVyZSwgdGhlbiBhbnl0
aW1lIHdlCisgICAgICAgIHRyYW5zaXRpb24gZnJvbSB0aGF0IFN0cnVjdHVyZSwgdGhlIG5ldyBT
dHJ1Y3R1cmUgc2hhcmVzIHRoZSBzYW1lIEluZmVycmVkVHlwZSBmb3IgdGhhdCBwcm9wZXJ0eS4K
KyAgICAgICAgVGhpcyB1bmlmaWVzIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBvdmVyIHRoZSBl
bnRpcmUgdHJhbnNpdGlvbiB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBTdHJ1Y3R1cmUgYXQKKyAgICAg
ICAgd2hpY2ggdGhlIHByb3BlcnR5IHdhcyBhZGRlZC4gQnV0IHRoaXMgd291bGQgc3RpbGwgbWVh
biB0aGF0IGVhY2ggU3RydWN0dXJlIHdvdWxkIGhhdmUgaXRzIG93bgorICAgICAgICBJbmZlcnJl
ZFR5cGVUYWJsZS4gV2UgZG9uJ3Qgd2FudCB0aGF0IGJlY2F1c2UgZXhwZXJpZW5jZSB3aXRoIFBy
b3BlcnR5VGFibGUgc2hvd3MgdGhhdCB0aGlzIGNhbiBiZQorICAgICAgICBhIG1ham9yIG1lbW9y
eSBob2cuIFNvLCB3ZSBkb24ndCBjcmVhdGUgYW4gSW5mZXJyZWRUeXBlVGFibGUgdW50aWwgc29t
ZW9uZSBhZGRzIGEgcHJvcGVydHkgdGhhdCBpcworICAgICAgICBzdWJqZWN0IHRvIHR5cGUgaW5m
ZXJlbmNlIChpLmUuIGl0IHdhcyBhZGRlZCBub24tcmVmbGVjdGl2ZWx5KSwgYW5kIHdlIHNoYXJl
IHRoYXQgSW5mZXJyZWRUeXBlVGFibGUKKyAgICAgICAgd2l0aCB0aGUgZW50aXJlIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIHRyZWUgcm9vdGVkIGF0IHRoZSBTdHJ1Y3R1cmUgdGhhdCBoYWQgdGhlIGZp
cnN0IGluZmVycmVkCisgICAgICAgIHByb3BlcnR5LiBXZSBhbHNvIGRyb3AgdGhlIEluZmVycmVk
VHlwZVRhYmxlIGFueXRpbWUgdGhhdCB3ZSBkbyBhIGRpY3Rpb25hcnkgdHJhbnNpdGlvbiwgYW5k
IHdlCisgICAgICAgIGRvbid0IGFsbG93IGZ1cnRoZXIgcHJvcGVydHkgdHlwZSBpbmZlcmVuY2Ug
aWYgYSBzdHJ1Y3R1cmUgaGFkIGV2ZXIgYmVlbiBhIGRpY3Rpb25hcnkuCisKKyAgICAgICAgVGhp
cyBpcyBhIDMlIHNwZWVkLXVwIG9uIE9jdGFuZSBhbmQgYSAxMiUgc3BlZWQtdXAgb24gS3Jha2Vu
IG9uIG15IHNldHVwLiBJdCdzIG5vdCBhIHNpZ25pZmljYW50CisgICAgICAgIHNsb3ctZG93biBv
biBhbnkgYmVuY2htYXJrIEkgcmFuLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YnJhbmNoVGVzdDY0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmJyYW5jaFRlc3Q2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
Ojp0ZXN0NjQpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1
dEJ5SWRGbGFncy5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGJ5dGVjb2RlL1B1dEJ5SWRGbGFncy5oOgorICAgICAgICAoSlNDOjplbmNvZGVTdHJ1Y3R1cmVJ
RCk6CisgICAgICAgIChKU0M6OmRlY29kZVN0cnVjdHVyZUlEKToKKyAgICAgICAgKiBieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZh
cmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpyZXBsYWNl
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRWYXJpYW50OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkVmFyaWFudDo6cmVxdWlyZWRUeXBlKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEluc3RydWN0aW9uOjpVbmxpbmtlZElu
c3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChK
U0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKEpTQzo6SW5saW5lV2F0
Y2hwb2ludFNldDo6aXNCZWluZ1dhdGNoZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRD
b25zdGFudFZhbHVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRC
eUlkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlY3RQdXRCeUlk
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjo6ZmlsdGVyQnlWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZmlsdGVy
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6c2V0VHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9y
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdl
T1NSRW50cnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNUeXBl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6
OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVHlwZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
c3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENv
bnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRH
ZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmFkZEJhc2VDaGVjayk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6RGVzaXJlZElu
ZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b3Bl
cmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6b2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpleHBlY3RlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEluZmVycmVkVHlwZTo6aXNTdGlsbFZhbGlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjphZGQpOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlND
OjpERkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRJbmZlcnJlZFR5cGU6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkSW5mZXJyZWRUeXBlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNp
cmVkSW5mZXJyZWRUeXBlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZElu
ZmVycmVkVHlwZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRB
ZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpEZXNpcmVkV2F0Y2hw
b2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6fkRlc2lyZWRX
YXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6ZHVtcEluQ29udGV4dCk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmR1bXBJbkNvbnRleHQpOgorICAgICAg
ICAoSlNDOjpERkc6OkluZmVycmVkVHlwZUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW5mZXJyZWRUeXBlQWRhcHRvcjo6ZHVtcEluQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1dhdGNoZWQpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1NhZmVUb0xv
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppbmZlcnJlZFR5cGVGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpsaXZlbmVzc0Zvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpp
bmZlcnJlZFZhbHVlRm9yUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp0cnlH
ZXRDb25zdGFudENsb3N1cmVWYXIpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmluZmVycmVkVHlwZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkZmcvREZH
SW5mZXJyZWRUeXBlQ2hlY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjppbnNlcnRJ
bmZlcnJlZFR5cGVDaGVjayk6CisgICAgICAgICogZGZnL0RGR0luZmVycmVkVHlwZUNoZWNrLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgICogZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcm9wZXJ0eVR5
cGVLZXkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpQcm9w
ZXJ0eVR5cGVLZXkpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0
b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpzdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6dWlkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BlcnR5VHlwZUtleTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVy
dHlUeXBlS2V5OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXk6Omlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVL
ZXk6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5OjpkZWxldGVkVUlEKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wZXJ0eVR5cGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVR5cGVPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsT3JPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b25seVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Zm9yRWFjaCk6CisgICAgICAgICogZGZnL0RGR1Vz
ZUtpbmQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcv
REZHVXNlS2luZC5oOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAg
ICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZh
bGlkYXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUNoZWNrQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06Om51bWJlck9yTm90Q2VsbFRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNoZWNrSW5mZXJyZWRUeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU1hY2hpbmVJbnQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRl
Y29kZWRDb2RlTWFwRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJ
Zk5vdFR5cGUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTik6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmJyYW5jaElmRXF1YWwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJy
YW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZD
ZWxsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdE90aGVyKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkludDMyKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdEludDMyKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk51bWJlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6YnJhbmNoSWZOb3ROdW1iZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmRW1wdHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5j
aFN0cnVjdHVyZSk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c206CisgICAgICAgICogcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SW5mZXJyZWRUeXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6
OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yOjpmb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6
RGVzY3JpcHRvcjo6Zm9yRmxhZ3MpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnB1dEJ5SWRGbGFncyk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvcjo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OnJl
bW92ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
c3Vic3VtZXMpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmR1bXAp
OgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OkluZmVycmVkVHlwZSk6CisgICAgICAgIChK
U0M6OkluZmVycmVkVHlwZTo6fkluZmVycmVkVHlwZSk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6Y2FuV2F0Y2gpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmFkZFdhdGNocG9p
bnQpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OmR1bXApOgorICAgICAgICAoSlNDOjpJ
bmZlcnJlZFR5cGU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OkluZmVycmVk
VHlwZTo6bWFrZVRvcFNsb3cpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SW5mZXJyZWRUeXBlOjpJbmZlcnJlZFN0cnVjdHVyZVdhdGNocG9pbnQ6OmZpcmVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6
ZXI6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRUeXBl
OjpJbmZlcnJlZFN0cnVjdHVyZTo6SW5mZXJyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFR5cGVUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRhYmxlOjpnZXQpOgorICAgICAg
ICAoSlNDOjpJbmZlcnJlZFR5cGVUYWJsZTo6d2lsbFN0b3JlVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFR5cGVUYWJsZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlw
ZVRhYmxlOjpJbmZlcnJlZFR5cGVUYWJsZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVHlwZVRh
YmxlOjp+SW5mZXJyZWRUeXBlVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmdldCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9wcm9wLXR5cGUtYm9vbGVhbi10aGVuLXN0cmluZy5qczogQWRkZWQuCisgICAgICAgICogdGVz
dHMvc3RyZXNzL3Byb3AtdHlwZS1pbnQzMi10aGVuLXN0cmluZy5qczogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1udW1iZXItdGhlbi1zdHJpbmcuanM6IEFkZGVkLgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy9wcm9wLXR5cGUtb2JqZWN0LW9yLW90aGVyLXRoZW4tc3Ry
aW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJvcC10eXBlLW9iamVjdC10
aGVuLXN0cmluZy5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1v
dGhlci10aGVuLXN0cmluZy5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3Byb3At
dHlwZS1zdHJpbmctdGhlbi1vYmplY3QuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9wcm9wLXR5cGUtc3RydWN0LW9yLW90aGVyLXRoZW4tc3RyaW5nLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cnVjdC10aGVuLW9iamVjdC5qczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1zdHJ1Y3QtdGhlbi1vYmplY3Qtb3B0
LmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cnVjdC10aGVu
LW9iamVjdC1vcHQtZm9sZC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3Byb3At
dHlwZS1zdHJ1Y3QtdGhlbi1vYmplY3Qtb3B0LW11bHRpLmpzOiBBZGRlZC4KKwogMjAxNS0wOS0y
MCAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgU2V0TG9jYWwgYW5kIFNldEdsb2JhbCBleHByZXNzaW9ucyBpbiBXZWJBc3NlbWJs
eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTkwMDU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xOTIsNiArMTkyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcv
REZHR3JhcGhTYWZlcG9pbnQuY3BwCiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKICAgICBk
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCisgICAgZGZnL0RGR0luZmVycmVkVHlwZUNo
ZWNrLmNwcAogICAgIGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwCiAgICAgZGZnL0RGR0ludGVnZXJD
aGVja0NvbWJpbmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRp
b25QaGFzZS5jcHAKQEAgLTUwMSw2ICs1MDIsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElN
RV9TT1VSQ0VTCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmNwcAogICAgIHJ1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcAogICAgIHJ1bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAKKyAgICBydW50aW1lL0lu
ZmVycmVkVHlwZS5jcHAKKyAgICBydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAogICAgIHJ1
bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKICAgICBydW50aW1lL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbk9iamVjdC5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MDA1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQyOCw2ICs0MjgsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbmZlcnJlZFR5cGVDaGVjay5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5zZXJ0aW9uU2V0LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyQ2hlY2tDb21i
aW5pbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50
ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIiAvPgpAQCAtNzUwLDYgKzc1MSw4IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJyZWRUeXBlLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJyZWRUeXBlVGFibGUuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5n
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uT2JqZWN0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5jcHAiIC8+CkBAIC0xMTM3LDYgKzExNDAsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NTRVBoYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRENFUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkSWRlbnRpZmllcnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZFRyYW5zaXRpb25zLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZFdhdGNocG9pbnRzLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmgiIC8+
CkBAIC0xMTY2LDYgKzExNzAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0dyYXBoU2FmZXBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
SGVhcExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdJbmZlcnJlZFR5cGVDaGVjay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0luc2VydGlvblNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCIgLz4KQEAgLTEyMTcs
NiArMTIyMiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1Byb3BlcnR5VHlwZUtleS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+CkBAIC0xNTkxLDYgKzE1OTcsOCBAQAog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlcklubGluZXMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVmFsdWUuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5mZXJyZWRUeXBlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVHlwZVRhYmxlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluaXRpYWxpemVUaHJlYWRp
bmcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50MTZBcnJheS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQzMkFycmF5LmgiIC8+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNjksNiArMTI2OSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5m
ZXJyZWRUeXBlQ2hlY2suY3BwIj4KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CisgICAgPC9D
bENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTE4NjYsNiArMTg2OSw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXERpcmVjdEFyZ3VtZW50cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXERpcmVjdEFyZ3VtZW50c09mZnNldC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVmFsdWUuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFR5cGUuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFR5cGVUYWJsZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNjb3BlT2Zmc2V0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2NvcGVkQXJndW1lbnRzLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2NvcGVkQXJndW1lbnRzVGFibGUu
Y3BwIiAvPgpAQCAtMzY3Niw2ICszNjgxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdEZXNpcmVkSWRlbnRpZmllcnMuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rl
c2lyZWRJbmZlcnJlZFR5cGUuaCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwv
Q2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRUcmFu
c2l0aW9ucy5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
CkBAIC0zNzQyLDYgKzM3NTAsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbmZlcnJl
ZFR5cGVDaGVjay5oIj4KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CkBAIC00NDI0LDYgKzQ0MzUsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
cm9wZXJ0eVR5cGVLZXkuaCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJ
bmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmgiPgogICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAg
LTQ0NjcsNiArNDQ4MSw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEdlbmVyaWNPZmZzZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5mZXJyZWRWYWx1ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbmZlcnJlZFR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSW5mZXJyZWRUeXBlVGFibGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcU2NvcGVPZmZzZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcU2NvcGVkQXJndW1lbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDYgKzg2LDggQEAKIAkJMEYwNDM5NkUxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2
ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MDQzOTZDMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwNUMzQjQxNjgzQ0Y5
MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDVDM0IyMTY4M0NGOEYwMEJBRjQ1
QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8q
IEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25F
ZmZvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIwMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovOyB9OworCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2
NjAgLyogSW5mZXJyZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzOUMx
NEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4Mzk3MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTElu
dFRodW5rcy5jcHAgKi87IH07CiAJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRo
dW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
QjgzOTgxNEJDRjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzQTcxNEJDRjUwNzAwODg1QjRG
IC8qIENvZGVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTQzLDYgKzU0NSw4IEBACiAJ
CTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNC
RDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1
cHBvcnQuY3BwICovOyB9OworCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJy
ZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDODQxNjYxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNw
cCAqLzsgfTsKKwkJMEZDODQxNjkxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNo
ZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4
NDE2NzFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM5N0YzMzE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjJGMTgyMDIwRDcwMDJD
OUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwICovOyB9OwogCQkwRkM5
N0YzNDE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzMDE4
MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDOTdGM0QxODIw
MjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGMzcxODIw
MjExOTAwMkM5QjI2IC8qIERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwICov
OyB9OwpAQCAtNzQyLDYgKzc0NiwxMCBAQAogCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyog
REZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkMxNjdGRTg0QjAwM0MyRjhEIC8qIERGR09TUkV4aXRD
b21waWxhdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xvd1BhdGhHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUz
QTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjIwMTZEMDMzQjcw
MDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzBEQUQwMzBGQjFFQjFBMDA4MkQyMDUgLyogTm9kZUNvbnN0
cnVjdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTIwRjFCOTRE
NERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovOyB9OworCQkwRkZDOTIxMjFC
OTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAvKiBJ
bmZlcnJlZFR5cGVUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRkM5MjE0MUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJy
ZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkZDOTIxMzFCOTRFODNFMDA3MURENjYgLyogREZHRGVzaXJlZEluZmVycmVkVHlwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRkM5MjE2MUI5
NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM5MjE1MUI5NEZCM0UwMDcxREQ2NiAvKiBE
RkdQcm9wZXJ0eVR5cGVLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkZDOTlEMTE4NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMDE4
NEVDOEFEMDA5QzEwQUIgLyogQ29uc3RhbnRNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFy
cmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlC
dWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJMEZGQzk5RDUxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDMxODRFRTMxODAwOUMxMEFC
IC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xOTI0LDYgKzE5MzIsOCBAQAogCQkwRjA0
Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBkZmcv
REZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA1
QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29t
cGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUQ29t
cGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQTc1MjAx
Qjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZmVycmVkVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjBCODM5NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJbnRUaHVua3MuY3Bw
OyBwYXRoID0gbGxpbnQvTExJbnRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjBCODM5ODE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRUaHVua3MuaDsgcGF0aCA9IGxsaW50L0xMSW50
VGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0E1MTRCQ0Y1MDQw
MDg4NUI0RiAvKiBDb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM5MCw2ICsyNDAwLDgg
QEAKIAkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNC
Q0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJT
dXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzg0MTY2MUJBOEMzMjEw
MDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHA7IHBhdGggPSBkZmcvREZH
SW5mZXJyZWRUeXBlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkM4
NDE2NzFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5mZXJyZWRUeXBlQ2hlY2suaDsgcGF0aCA9IGRm
Zy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkM5N0YyRjE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3
RjMwMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjM3MTgyMDIxMTkw
MDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0
aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU3Nyw2ICsyNTg5LDEwIEBA
CiAJCTBGRjlDRTcyMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vzcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZCNkMzNjFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9m
VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlb2ZUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQjZDMzcxQUY0OEREQzAwREIx
QkY3IC8qIFR5cGVvZlR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZW9mVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDOTIwRjFCOTRENERG
MDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkZDOTIxMDFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlVGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8q
IERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRGVzaXJlZEluZmVycmVkVHlwZS5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJbmZlcnJl
ZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzkyMTUxQjk0RkIzRTAw
NzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdQcm9wZXJ0eVR5cGVLZXkuaDsgcGF0aCA9IGRmZy9ERkdQcm9wZXJ0eVR5cGVL
ZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMx
MEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRF
RTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNo
cG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4
MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDY3MSw4ICs0Njg3LDggQEAKIAkJCQlCQzAy
RTk4QjBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oICovLAogCQkJCUJDMDJFOTA2
MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkMwMkU5MDcw
RTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi8sCi0JCQkJRkUxQzBGRkMxQjE5
M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1
M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovLAorCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAv
KiBFeGNlcHRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0
aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlv
bkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0aW9uSGVs
cGVycy5jcHAgKi8sCkBAIC00NzA2LDYgKzQ3MjIsMTAgQEAKIAkJCQkwRkI3RjM4RTE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggKi8sCiAJCQkJMEYxM0UwNEMxNjE2
NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJCQkJMEZCN0YzOEYxNUVEOEUz
ODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBGMEE3NTIwMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwICovLAorCQkJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2
MCAvKiBJbmZlcnJlZFR5cGUuaCAqLywKKwkJCQkwRkZDOTIwRjFCOTRENERGMDA3MURENjYgLyog
SW5mZXJyZWRUeXBlVGFibGUuY3BwICovLAorCQkJCTBGRkM5MjEwMUI5NEQ0REYwMDcxREQ2NiAv
KiBJbmZlcnJlZFR5cGVUYWJsZS5oICovLAogCQkJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAv
KiBJbmZlcnJlZFZhbHVlLmNwcCAqLywKIAkJCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyog
SW5mZXJyZWRWYWx1ZS5oICovLAogCQkJCUUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0
aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKQEAgLTQ3NTYsMTAgKzQ3NzYsMTAgQEAKIAkJCQkwRjJC
NjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJ
CQkJQTdCREFFQzQxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5jcHAgKi8sCiAJ
CQkJQTdCREFFQzUxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oICovLAotCQkJ
CTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAotCQkJ
CTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKIAkJCQk4
QjBGNDI0QjFBQkQ2REUyMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmNwcCAqLywKIAkJCQk4
QjBGNDI0QTFBQkQ2RDJGMDAzOTE3RUEgLyogSlNBcnJvd0Z1bmN0aW9uLmggKi8sCisJCQkJODZG
QTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCisJCQkJODZG
QTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCTY1N0NG
NDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8sCiAJCQkJNjU3Q0Y0NTcxOUJG
NjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYz
MkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC01MDYyLDkgKzUwODIsOSBAQAogCQkJCTBGRTA1MDI0
MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhD
MDBEOTBCMzQgLyogVk0uY3BwICovLAogCQkJCUUxOEUzQTU2MERGOTI3OEMwMEQ5MEIzNCAvKiBW
TS5oICovLAotCQkJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLywK
IAkJCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLywKIAkJ
CQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8sCisJCQkJRkU5
MEJCM0ExQjdDRjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovLAogCQkJCUZFRDk0RjJCMTcx
RTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgKi8sCiAJCQkJRkVEOTRGMkMxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8q
IFdlYWtHQ01hcC5oICovLApAQCAtNTIxNiw2ICs1MjM2LDcgQEAKIAkJCQkwRjJGQzc3MTE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3
REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYw
NEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCisJCQkJMEZGQzkyMTMx
Qjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKIAkJCQlDMkMw
RjdDQjE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCAqLywKIAkJ
CQlDMkMwRjdDQzE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggKi8s
CiAJCQkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8sCkBAIC01MjYyLDYgKzUyODMsOCBAQAogCQkJCTBGMkZDQ0YzMThBNjAwNzAwMDFBMjdG
OCAvKiBERkdHcmFwaFNhZmVwb2ludC5oICovLAogCQkJCTBGQjE3NjVDMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uY3BwICovLAogCQkJCTBGQjE3NjVEMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdIZWFwTG9jYXRpb24uaCAqLywKKwkJCQkwRkM4NDE2NjFCQThDMzIxMDA2MTgzN0Qg
LyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwICovLAorCQkJCTBGQzg0MTY3MUJBOEMzMjEwMDYx
ODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5oICovLAogCQkJCTBGQjE0RTIwMTgxMjU3MEIw
MDlCNkI0RCAvKiBERkdJbmxpbmVDYWNoZVdyYXBwZXIuaCAqLywKIAkJCQkwRkIxNEUyMjE4MTMw
OTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVySW5saW5lcy5oICovLAogCQkJCUE3
MDREOTAwMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgKi8s
CkBAIC01Mjk0LDEwICs1MzE3LDEwIEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8q
IERGR0xvbmdMaXZlZFN0YXRlLmggKi8sCiAJCQkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8q
IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQlBNzY3QjVCNDE3QTBC
OTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKLQkJCQkw
RjU4NzRFQjE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5jcHAgKi8sCi0JCQkJMEY1ODc0
RUMxOTRGRUIxMjAwQUFCMkMxIC8qIERGR01heUV4aXQuaCAqLywKIAkJCQk3OUY4RkMxQzFCOUZF
RDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovLAogCQkJ
CTc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5oICovLAorCQkJCTBGNTg3NEVCMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmNwcCAq
LywKKwkJCQkwRjU4NzRFQzE5NEZFQjEyMDBBQUIyQzEgLyogREZHTWF5RXhpdC5oICovLAogCQkJ
CTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJ
CQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJ
CTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCkBAIC01MzY1
LDYgKzUzODgsNyBAQAogCQkJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0
TnVtYmVyaW5nLmggKi8sCiAJCQkJMEYyQjlDRTAxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcCAqLywKIAkJCQkwRjJCOUNFMTE5RDBCQTdEMDBCMUQxQjUgLyog
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCAqLywKKwkJCQkwRkZDOTIxNTFCOTRGQjNFMDA3MURE
NjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEw
NTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJB
IC8qIERGR1B1cmVWYWx1ZS5oICovLAogCQkJCTBGM0ExQkY3MUE5RUNCN0QwMDBERTAxQSAvKiBE
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAgKi8sCkBAIC01OTU3LDYgKzU5ODEsNyBAQAogCQkJ
CUZFNTA2ODY1MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM0NDJDQjI1MUE2Q0RCOEMwMDVEM0Q3QyAvKiBKU0lucHV0cy5qc29uIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTQxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2ly
ZWRJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5RUUwQzAwMUI0QUZCODUwMDAz
ODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY5
MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MDcxLDYgKzYwOTYsNyBAQAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYw
MDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4
RUI3MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBD
b2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8q
IENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDlGQjg2QzFBRTMzNUM2
MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzUxLDEy
ICs2Mzc3LDE0IEBACiAJCQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbEtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOUIxODAzQURCNzAwNzNDMkJDIC8q
IEZUTFN0YWNrTWFwcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM4NDE2OTFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkND
MjZEMTdBMEI2QUEwMDc4NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjIzNUJFMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVl
RnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQg
LyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGQzkyMTIxQjk0RDRERjAw
NzFERDY2IC8qIEluZmVycmVkVHlwZVRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4
NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTY1MjEsNiArNjU0OSw3IEBACiAJCQkJQkMxOEM0MUYwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEJBMTc5NzYwM0Qw
MDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RjMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0NjMs
NiArNzQ5Miw3IEBACiAJCQkJMTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRjExODkxQjVCNDAwMzFDN0ZBIC8qIENv
bnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0MDMwNTUxNEI0
MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM5
MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQUFDRTYzQzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5Vmlz
aXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyog
RGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODQ3LDYgKzc4NzcsNyBAQAogCQkJCTBG
RjA1NEY5MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzUxQURG
MDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTRCRDVBMzIwQTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNv
cmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODgxLDYgKzc5MTIsNyBAQAogCQkJCTg2QzU2OEUw
MTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMzNGNTA3NDFCODQyMUMwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1h
Y3JvQXNzZW1ibGVyQVJNdjcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQTc1MjIxQjk0QkZB
OTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4
NTE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNv
bGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMTkw
MDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4NTMsNiArMTg1MywxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1ha2VCcmFuY2goY29uZCkpOwogICAgIH0KIAorICAg
IEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywg
VHJ1c3RlZEltbTY0IG1hc2spCisgICAgeworICAgICAgICBtb3ZlKG1hc2ssIGdldENhY2hlZERh
dGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHJldHVybiBicmFuY2hU
ZXN0NjQoY29uZCwgcmVnLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICB9CisKICAgICBKdW1wIGJy
YW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIG1hc2spCiAgICAgewogICAgICAgICBsb2FkNjQoYWRkcmVzcywgZ2V0Q2FjaGVkRGF0YVRl
bXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9u
IDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDYgKzYwNSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsK
ICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFRydXN0ZWRJbW02NCBtYXNrKQorICAgIHsKKyAgICAgICAgbW92ZShtYXNr
LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIHJl
Zywgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICB9CisKICAgICB2b2lkIHRlc3Q2NChSZXN1bHRDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTEsNiArNjkxLDE1IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICB9CiAKICAgICBj
YXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVy
ZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNj
cmlwdG9yKCksICJcbiIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5k
KAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hJZk5vdFR5cGUoCisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBl
cnM6OkRvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAgCiAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKICAgICAgICAgICAgIGppdC5z
dG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKQEAgLTcxNCw2ICs3MjMsMTUg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICBSRUxF
QVNFX0FTU0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA9PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSk7CiAKKyAg
ICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5
cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIp
OworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAg
ICAgIGppdC5icmFuY2hJZk5vdFR5cGUoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncywg
c2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpLCBDQ2FsbEhlbHBlcnM6OkRvTm90SGF2ZVRh
Z1JlZ2lzdGVycykpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKyAgICAgICAgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCShyZXZpc2lv
biAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlB1dEJ5SWRGbGFncy5oIgogCisjaW5jbHVkZSAiSW5mZXJyZWRUeXBlLmgi
CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtMzUsMTYgKzM2LDE0
IEBAIG5hbWVzcGFjZSBXVEYgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFB1dEJ5SWRGbGFncyBmbGFncykgewotICAgIFN0cmlu
Z1ByaW50U3RyZWFtIHN0cmluZ091dDsKICAgICBDb21tYVByaW50ZXIgY29tbWEoInwiKTsKICAg
ICBpZiAoZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIHN0cmluZ091dC5wcmludChj
b21tYSwgIklzRGlyZWN0Iik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIklzRGlyZWN0Iik7
CiAKLSAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKLSAgICBpZiAo
IXN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgb3V0LnByaW50KCJOb25lIik7Ci0gICAgZWxzZQot
ICAgICAgICBvdXQucHJpbnQoc3RyaW5nKTsKKyAgICBJbmZlcnJlZFR5cGU6OktpbmQga2luZCA9
IEluZmVycmVkVHlwZTo6a2luZEZvckZsYWdzKGZsYWdzKTsKKyAgICBvdXQucHJpbnQoY29tbWEs
IGtpbmQpOworICAgIGlmIChJbmZlcnJlZFR5cGU6Omhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAg
ICAgb3V0LnByaW50KCI6IiwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGRlY29kZVN0cnVjdHVyZUlE
KGZsYWdzKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgJKHJldmlzaW9uIDE5MDA1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkRmxhZ3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTMgKzI2LDcwIEBACiAjaWZuZGVmIFB1dEJ5SWRGbGFnc19oCiAjZGVmaW5l
IFB1dEJ5SWRGbGFnc19oCiAKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCisKIG5hbWVz
cGFjZSBKU0MgewogCi1lbnVtIFB1dEJ5SWRGbGFncyB7CitlbnVtIFB1dEJ5SWRGbGFncyA6IGlu
dHB0cl90IHsKICAgICBQdXRCeUlkTm9uZSA9IDAsCi0gICAgUHV0QnlJZElzRGlyZWN0ID0gMQor
CisgICAgLy8gVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBwdXRfYnlfaWQgaXMgZGlyZWN0
LiBUaGF0IG1lYW5zIHRoYXQgd2Ugc3RvcmUgdGhlIHByb3BlcnR5IHdpdGhvdXQKKyAgICAvLyBj
aGVja2luZyBpZiB0aGUgcHJvdG90eXBlIGNoYWluIGhhcyBhIHNldHRlci4KKyAgICBQdXRCeUlk
SXNEaXJlY3QgPSAweDEsCisgICAgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2sgPSAweDEsCisK
KyAgICAvLyBOT1RFOiBUaGUgdmFsdWVzIGJlbG93IG11c3QgYmUgaW4gc3luYyB3aXRoIHdoYXQg
aXMgaW4gTG93TGV2ZWxJbnRlcnByZXRlci5hc20uCisKKyAgICAvLyBEZXRlcm1pbmluZyB0aGUg
cmVxdWlyZWQgaW5mZXJyZWQgdHlwZSBpbnZvbHZlcyBmaXJzdCBjaGVja2luZyB0aGUgcHJpbWFy
eSB0eXBlIG1hc2ssIGFuZCB0aGVuCisgICAgLy8gdXNpbmcgdGhhdCB0byBmaWd1cmUgb3V0IHRo
ZSBtZWFuaW5nIG9mIHRoZSBzZWNvbmRhcnkgbWFzazoKKyAgICAvLyBzd2l0Y2ggKGZsYWdzICYg
UHV0QnlJZFByaW1hcnlUeXBlTWFzaykgeworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBl
U2Vjb25kYXJ5OgorICAgIC8vICAgICBzd2l0Y2ggKGZsYWdzICYgUHV0QnlJZFNlY29uZGFyeVR5
cGVNYXNrKSB7CisgICAgLy8gICAgIC4uLgorICAgIC8vICAgICB9CisgICAgLy8gICAgIGJyZWFr
OworICAgIC8vIGNhc2UgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAg
ICAvLyBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgIC8vICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IGRlY29kZVN0cnVjdHVyZUlEKGZs
YWdzKTsKKyAgICAvLyAgICAgYnJlYWs7CisgICAgLy8gfQorICAgIFB1dEJ5SWRQcmltYXJ5VHlw
ZU1hc2sgPSAweDYsCisgICAgUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5ID0gMHgwLCAvLyBO
ZWVkIHRvIGNoZWNrIHRoZSBzZWNvbmRhcnkgdHlwZSBtYXNrIGZvciB0aGUgdHlwZS4KKyAgICBQ
dXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlID0gMHgyLCAvLyBTZWNvbmRhcnkg
dHlwZSBoYXMgc3RydWN0dXJlIElELgorICAgIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhT
dHJ1Y3R1cmVPck90aGVyID0gMHg0LCAvLyBTZWNvbmRhcnkgdHlwZSBoYXMgc3RydWN0dXJlIElE
LgorCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrID0gLTB4OCwKKyAgICBQdXRCeUlkU2Vj
b25kYXJ5VHlwZUJvdHRvbSA9IDB4MCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvb2xlYW4g
PSAweDgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlciA9IDB4MTAsCisgICAgUHV0QnlJ
ZFNlY29uZGFyeVR5cGVJbnQzMiA9IDB4MTgsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5cGVOdW1i
ZXIgPSAweDIwLAorICAgIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3RyaW5nID0gMHgyOCwKKyAgICBQ
dXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCA9IDB4MzAsCisgICAgUHV0QnlJZFNlY29uZGFyeVR5
cGVPYmplY3RPck90aGVyID0gMHgzOCwKKyAgICBQdXRCeUlkU2Vjb25kYXJ5VHlwZVRvcCA9IDB4
NDAKIH07CiAKK2lubGluZSBQdXRCeUlkRmxhZ3MgZW5jb2RlU3RydWN0dXJlSUQoU3RydWN0dXJl
SUQgaWQpCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0
QnlJZEZsYWdzPihzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKSA8PCAzKTsKKyNlbHNlCisg
ICAgUHV0QnlJZEZsYWdzIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxQdXRCeUlkRmxhZ3M+KGlkKTsK
KyAgICBBU1NFUlQoIShyZXN1bHQgJiB+UHV0QnlJZFNlY29uZGFyeVR5cGVNYXNrKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQorCitpbmxpbmUgU3RydWN0dXJlSUQgZGVjb2RlU3Ry
dWN0dXJlSUQoUHV0QnlJZEZsYWdzIGZsYWdzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZUlEPihmbGFncyA+PiAzKTsKKyNlbHNlCisgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxTdHJ1Y3R1cmVJRD4oZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU1hc2spOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2Ug
V1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
Tm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQsIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRGVz
Y3JpcHRvckZvcih1aWQpKTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChuZXdTdHJ1Y3R1cmVJRCk7CkBAIC0xMDMs
NyArMTAzLDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgfQogICAg
IAotICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIG5ld1N0
cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBvZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkVmFyaWFu
dDo6dHJhbnNpdGlvbigKKyAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgb2Zmc2V0LCBuZXdTdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0b3JGb3IodWlk
KSk7CiB9CiAKIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0xNjIsNyArMTYzLDcgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUu
YnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAg
ICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZSgKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5ieUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCwgSW5m
ZXJyZWRUeXBlOjpUb3ApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwogICAgIH0KQEAgLTE5Myw3ICsxOTQsOCBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFu
dCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUtPmluZmVycmVkVHlwZURlc2NyaXB0
b3JGb3IodWlkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCkBAIC0yMDYsNyArMjA4LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LnN0cnVj
dHVyZXNFbnN1cmVWYWxpZGl0eSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhzbG93UGF0aFN0YXRlKTsKICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJ
ZFZhcmlhbnQ6OnRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1
cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLCBjb25kaXRpb25TZXQsIG9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgp
LCBjb25kaXRpb25TZXQsIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0
cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzI5LDggKzMz
MiwxMCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAg
ICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0
aC4KICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQor
CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0KKyAgICAgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCwgc3RydWN0dXJlLT5pbmZl
cnJlZFR5cGVEZXNjcmlwdG9yRm9yKHVpZCkpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudCh2YXJpYW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0z
NTYsMTMgKzM2MSwxNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgIH0KICAgICAKICAgICAgICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBp
cyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgot
ICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAs
IG9mZnNldCk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9CisgICAgICAgICAgICBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJy
ZW50bHkoc3RydWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlv
bikKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAg
ICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBk
aWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZz
ZXQpKTsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY29uZGl0aW9uU2V0LCBvZmZzZXQsCisgICAg
ICAgICAgICAgICAgdHJhbnNpdGlvbi0+aW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcih1aWQpKSk7
CiAgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxOTAwNTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6
b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAg
IG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7CiAgICAgbV9vZmZzZXQgPSBv
dGhlci5tX29mZnNldDsKKyAgICBtX3JlcXVpcmVkVHlwZSA9IG90aGVyLm1fcmVxdWlyZWRUeXBl
OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3Rh
dHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtT
dGF0dXMpOwogICAgIGVsc2UKQEAgLTUyLDE4ICs1MywyMSBAQCBQdXRCeUlkVmFyaWFudCYgUHV0
QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1QdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2UoCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiByZXF1aXJlZFR5cGUp
CiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwogICAgIHJlc3VsdC5tX2tpbmQgPSBSZXBs
YWNlOwogICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgcmVzdWx0Lm1fcmVxdWlyZWRUeXBlID0gcmVxdWlyZWRU
eXBlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgcmVxdWlyZWRUeXBlKQog
ewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gVHJhbnNp
dGlvbjsKQEAgLTcxLDYgKzc1LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpbwogICAgIHJlc3VsdC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKICAgICBy
ZXN1bHQubV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gb2Zmc2V0OworICAgIHJlc3VsdC5tX3JlcXVpcmVkVHlwZSA9IHJlcXVpcmVkVHlwZTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NSw2ICs5MCw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1
dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgcmVzdWx0Lm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQubV9jYWxs
TGlua1N0YXR1cyA9IFdURjo6bW92ZShjYWxsTGlua1N0YXR1cyk7CisgICAgcmVzdWx0Lm1fcmVx
dWlyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpUb3A7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTM0LDkgKzE0MCwxMiBAQCBib29sIFB1dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zCiB7CiAgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZXF1aXJlZFR5cGUgIT0gb3RoZXIubV9yZXF1aXJlZFR5
cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkgewot
ICAgIGNhc2UgUmVwbGFjZToKKyAgICBjYXNlIFJlcGxhY2U6IHsKICAgICAgICAgc3dpdGNoIChv
dGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBSZXBsYWNlOiB7CiAgICAgICAgICAgICBBU1NF
UlQobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKQEAgLTE1OCw2ICsxNjcsNyBAQCBib29sIFB1
dEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgVHJhbnNpdGlvbjoKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKQEAgLTIxMCwx
NCArMjIwLDE2IEBAIHZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAg
ICAgICAgCiAgICAgY2FzZSBSZXBsYWNlOgogICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAg
ICAiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsIG9mZnNl
dCA9ICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBpbkNvbnRl
eHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSwgIiwgIiwK
KyAgICAgICAgICAgIGluQ29udGV4dChyZXF1aXJlZFR5cGUoKSwgY29udGV4dCksICI+Iik7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBUcmFuc2l0aW9uOgogICAgICAgICBv
dXQucHJpbnQoCiAgICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1
Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKICAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250
ZXh0KG5ld1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgWyIsCi0gICAgICAgICAgICBpbkNvbnRl
eHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCksICI+
Iik7CisgICAgICAgICAgICBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpLCAiXSwg
b2Zmc2V0ID0gIiwgb2Zmc2V0KCksICIsICIsCisgICAgICAgICAgICBpbkNvbnRleHQocmVxdWly
ZWRUeXBlKCksIGNvbnRleHQpLCAiPiIpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgU2V0dGVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSAr
NTMsMTEgQEAgcHVibGljOgogICAgIFB1dEJ5SWRWYXJpYW50KGNvbnN0IFB1dEJ5SWRWYXJpYW50
Jik7CiAgICAgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBQdXRCeUlkVmFyaWFudCYp
OwogCi0gICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHJlcGxhY2UoY29uc3QgU3RydWN0dXJlU2V0
JiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCByZXBsYWNlKGNv
bnN0IFN0cnVjdHVyZVNldCYsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3ImKTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNpdGlvbigK
ICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
LCBQcm9wZXJ0eU9mZnNldCwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7CiAgICAg
CiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigKICAgICAgICAgY29uc3QgU3RydWN0
dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiwKQEAgLTk5LDYgKzk5LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0
dXJlOwogICAgIH0KIAorICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciByZXF1aXJlZFR5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVxdWlyZWRUeXBlOworICAgIH0KKwog
ICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgcmVhbGxvY2F0ZXNT
dG9yYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CkBAIC0xMzAsNiAr
MTM1LDcgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwogICAgIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OworICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBtX3JlcXVpcmVkVHlw
ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDYgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2lu
Y2x1ZGUgIlBhcnNlck1vZGVzLmgiCi0jaW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVk
ZSAiUmVnRXhwLmgiCiAjaW5jbHVkZSAiU3BlY2lhbFBvaW50ZXIuaCIKICNpbmNsdWRlICJVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oIgpAQCAtOTgsMTIgKzk3LDEwIEBAIHN0cnVjdCBVbmxp
bmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtlZEluc3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQg
PSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNv
ZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKGludCBvcGVyYW5kKSB7IHUu
b3BlcmFuZCA9IG9wZXJhbmQ7IH0KLSAgICBVbmxpbmtlZEluc3RydWN0aW9uKFB1dEJ5SWRGbGFn
cyBmbGFncykgeyB1LnB1dEJ5SWRGbGFncyA9IGZsYWdzOyB9CiAgICAgdW5pb24gewogICAgICAg
ICBPcGNvZGVJRCBvcGNvZGU7CiAgICAgICAgIGludDMyX3Qgb3BlcmFuZDsKICAgICAgICAgdW5z
aWduZWQgaW5kZXg7Ci0gICAgICAgIFB1dEJ5SWRGbGFncyBwdXRCeUlkRmxhZ3M7CiAgICAgfSB1
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5oCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2LDM5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiAgICAgfQot
ICAgIAorCisgICAgLy8gTm90ZSB0aGF0IGZvciBhbnkgd2F0Y2hwb2ludCB0aGF0IGlzIHZpc2li
bGUgZnJvbSB0aGUgREZHLCBpdCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gd3JpdGUgY29kZSBsaWtl
OgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAgdy5m
aXJlQWxsKCkKKyAgICAvLworICAgIC8vIENvbmN1cnJlbnRseSB0byB0aGlzLCB0aGUgREZHIGNv
dWxkIGRvOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNTdGlsbFZhbGlkKCkpCisgICAgLy8gICAg
IHBlcmZvcm0gb3B0aW1pemF0aW9uczsKKyAgICAvLyBpZiAoIXcuaXNTdGlsbFZhbGlkKCkpCisg
ICAgLy8gICAgIHJldHJ5IGNvbXBpbGF0aW9uOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IHRo
ZSBERkcgYWxnb3JpdGhtIGlzIHdpZGVzcHJlYWQsIGFuZCBzb3VuZCwgYmVjYXVzZSBmaXJlQWxs
KCkgYW5kIGludmFsaWRhdGUoKSB3aWxsIGxlYXZlCisgICAgLy8gdGhlIHdhdGNocG9pbnQgaW4g
YSAhaXNTdGlsbFZhbGlkKCkgc3RhdGUuIEhlbmNlLCBpZiBmaXJlQWxsKCkgb3IgaW52YWxpZGF0
ZSgpIGludGVybGVhdmVkIGJldHdlZW4KKyAgICAvLyB0aGUgZmlyc3QgaXNTdGlsbFZhbGlkKCkg
Y2hlY2sgYW5kIHRoZSBzZWNvbmQgb25lLCB0aGVuIGl0IHdvdWxkIHNpbXBseSBjYXVzZSB0aGUg
REZHIHRvIHJldHJ5CisgICAgLy8gY29tcGlsYXRpb24gbGF0ZXIuCisgICAgLy8KKyAgICAvLyBC
dXQsIGlmIHlvdSBjaGFuZ2Ugc29tZSBwaWVjZSBvZiBzdGF0ZSB0aGF0IHRoZSBERkcgbWlnaHQg
b3B0aW1pemUgZm9yLCBidXQgaW52YWxpZGF0ZSB0aGUKKyAgICAvLyB3YXRjaHBvaW50IGJ5IGRv
aW5nOgorICAgIC8vCisgICAgLy8gaWYgKHcuaXNCZWluZ1dhdGNoZWQoKSkKKyAgICAvLyAgICAg
dy5maXJlQWxsKCkKKyAgICAvLworICAgIC8vIHRoZW4gdGhlIERGRyB3b3VsZCBuZXZlciBrbm93
IHRoYXQgeW91IGludmFsaWRhdGVkIHN0YXRlIGJldHdlZW4gdGhlIHR3byBjaGVja3MuCisgICAg
Ly8KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gd29yayBhcm91bmQgdGhpczoKKyAgICAv
LworICAgIC8vIC0gQ2FsbCBmaXJlQWxsKCkgd2l0aG91dCBhIGlzQmVpbmdXYXRjaGVkKCkgY2hl
Y2suIFRoZW4sIHRoZSBERkcgd2lsbCBrbm93IHRoYXQgdGhlIHdhdGNocG9pbnQgaGFzCisgICAg
Ly8gICBiZWVuIGludmFsaWRhdGVkIHdoZW4gaXQgZG9lcyBpdHMgc2Vjb25kIGNoZWNrLgorICAg
IC8vCisgICAgLy8gLSBEbyBub3QgZXhwb3NlIHRoZSB3YXRjaHBvaW50IHNldCB0byB0aGUgREZH
IGRpcmVjdGx5LCBhbmQgaGF2ZSB5b3VyIG93biB3YXkgb2YgdmFsaWRhdGluZyB3aGV0aGVyCisg
ICAgLy8gICB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGUgREZHIHRocmVhZCB1c2VkIGFyZSBzdGls
bCB2YWxpZCB3aGVuIHRoZSBERkcgY29kZSBpcyBpbnN0YWxsZWQuCiAgICAgYm9vbCBpc0JlaW5n
V2F0Y2hlZCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNGYXQoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExNCw3
ICsyMTE0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRCeQogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gb2Zmc2V0CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKDApOyAvLyBuZXcgc3RydWN0dXJlCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDAp
OyAvLyBzdHJ1Y3R1cmUgY2hhaW4KLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoUHV0QnlJZE5v
bmUpOyAvLyBpcyBub3QgZGlyZWN0CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0YXRpY19j
YXN0PGludD4oUHV0QnlJZE5vbmUpKTsgLy8gaXMgbm90IGRpcmVjdAogCiAgICAgcmV0dXJuIHZh
bHVlOwogfQpAQCAtMjEzNiw3ICsyMTM2LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREaXJlYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gb2Zmc2V0CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBuZXcgc3RydWN0dXJlCiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBzdHJ1Y3R1cmUgY2hhaW4gKHVudXNlZCBpZiBkaXJlY3Qp
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKChwdXRUeXBlID09IFByb3BlcnR5Tm9kZTo6S25v
d25EaXJlY3QgfHwgcHJvcGVydHkgIT0gbV92bS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVBy
b3RvKSA/IFB1dEJ5SWRJc0RpcmVjdCA6IFB1dEJ5SWROb25lKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50PigocHV0VHlwZSA9PSBQcm9wZXJ0eU5vZGU6Oktub3du
RGlyZWN0IHx8IHByb3BlcnR5ICE9IG1fdm0tPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90
bykgPyBQdXRCeUlkSXNEaXJlY3QgOiBQdXRCeUlkTm9uZSkpOwogICAgIHJldHVybiB2YWx1ZTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyLmgJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOSAr
MTE2LDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFQg
bm9kZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0
ZXIoVCBub2RlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0
ZWRUeXBlcyA9IFNwZWNOb25lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbHRlcihmb3JOb2Rl
KG5vZGUpLCBzZXQpOworICAgICAgICByZXR1cm4gZmlsdGVyKGZvck5vZGUobm9kZSksIHNldCwg
YWRtaXR0ZWRUeXBlcyk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBA
IC0xMzksNyArMTM5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmlsdGVyQnlWYWx1ZShm
b3JOb2RlKG5vZGUpLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQg
ZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlcihBYnN0cmFjdFZhbHVlJiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3Bl
Y3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckFycmF5TW9kZXMoQWJzdHJhY3RWYWx1ZSYsIEFycmF5TW9kZXMpOwogICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7CiAg
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFsdWUmLCBGcm96ZW5W
YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4MjksMTAgKzE4MjksMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAoIXZh
bHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVk
KCkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkKICAgICAgICAgICAg
ICYmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlw
ZSAmIH5TcGVjQ2VsbCkpKSB7Ci0gICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgdmFsdWUubV9zdHJ1Y3R1
cmUuc2V0KCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCld
KTsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZp
ZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKyAgICAgICAgICAgIEdldEJ5SWRTdGF0
dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcih2YWx1ZS5tX3N0cnVjdHVyZS5z
ZXQoKSwgdWlkKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAg
ICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0aGUgcmVzdWx0IGlzIGdvaW5nIHRvIGJlIC0g
aXMgaXQgVE9QLCBhIGNvbnN0YW50LCBvciBtYXliZQogICAgICAgICAgICAgICAgIC8vIHNvbWV0
aGluZyBtb3JlIHN1YnRsZT8KQEAgLTE4NDEsMjIgKzE4NDEsMTIgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHRo
aW5nIHdvbid0IGdpdmUgdXMgYSB2YXJpYW50IHRoYXQgaW52b2x2ZXMgcHJvdG90eXBlcy4gSWYg
aXQgZGlkLCB3ZSdkCiAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgbW9yZSB3b3JrIHRvIGRv
IGhlcmUuCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgc3Rh
dHVzW2ldLmNvbmRpdGlvblNldCgpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2YWx1ZSwgc3RhdHVz
W2ldLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0
OwotICAgICAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOworCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5tZXJnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaW5m
ZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
LCB1aWQsIHN0YXR1c1tpXS5vZmZzZXQoKSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkgPSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC0xODgwLDcgKzE4NzAsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQVNT
RVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3Vs
ZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0
ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgIApAQCAtMTg4OCwxMiArMTg3NywyNCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIHRo
YXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQg
bWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCiAgICAgICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBj
dXJyZW50bHkgZG9uJ3QuCiAgICAgICAgIAotICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwor
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGFkbWl0dGVkVHlwZXMgPSBTcGVjTm9uZTsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxs
VXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIGFkbWl0dGVkVHlw
ZXMgPSBTcGVjTm9uZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxPck90
aGVyVXNlOgorICAgICAgICAgICAgYWRtaXR0ZWRUeXBlcyA9IFNwZWNPdGhlcjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOworICAgICAgICAKKyAgICAgICAgZmlsdGVy
KHZhbHVlLCBzZXQsIGFkbWl0dGVkVHlwZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtMjA4NCwxMyArMjA4NSwyOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0KSB7
Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAg
Ly8gRklYTUU6IFRoZSBwYXJ0IG9mIHRoaXMgdGhhdCBoYW5kbGVzIGluZmVycmVkIHByb3BlcnR5
IHR5cGVzIHJlbGllcyBvbiBBSSBrbm93aW5nIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gcmln
aHQgbm93LiBUaGF0J3MgcHJvYmFibHkgbm90IG9wdGltYWwuIEluIHNvbWUgY2FzZXMsIHdlIG1h
eSBwZXJmb3JtIGFuIG9wdGltaXphdGlvbiAodXN1YWxseQorICAgICAgICAvLyBieSBzb21ldGhp
bmcgb3RoZXIgdGhhbiBBSSwgbWF5YmUgYnkgQ1NFIGZvciBleGFtcGxlKSB0aGF0IG9ic2N1cmVz
IEFJJ3MgdmlldyBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIC8vIGF0IHRoZSBwb2ludCB3aGVy
ZSBHZXRCeU9mZnNldCBydW5zLiBDdXJyZW50bHksIHdoZW4gdGhhdCBoYXBwZW5zLCB3ZSdsbCBo
YXZlIHRvIHJlbHkgZW50aXJlbHkKKyAgICAgICAgLy8gb24gdGhlIHR5cGUgdGhhdCBCeXRlQ29k
ZVBhcnNlciB3YXMgYWJsZSB0byBwcm92ZS4KKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9
IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSksIHVpZCwgZGF0YS5vZmZzZXQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJl
clN0YXRlKCkpOworCisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdHlwZSB0aGF0
IEJ5dGVDb2RlUGFyc2VyIGNhbWUgdXAgd2l0aCBpcyBiZXR0ZXIuCisgICAgICAgIEFic3RyYWN0
VmFsdWUgdHlwZUZyb21QYXJzaW5nOworICAgICAgICB0eXBlRnJvbVBhcnNpbmcuc2V0KG1fZ3Jh
cGgsIGRhdGEuaW5mZXJyZWRUeXBlLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsK
KyAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGcm9tUGFyc2luZyk7CisKKyAgICAgICAgLy8gSWYg
d2UgZGVjaWRlIHRoYXQgdGhlcmUgZG9lcyBub3QgZXhpc3QgYW55IHZhbHVlIHRoYXQgdGhpcyBj
YW4gcmV0dXJuLCB0aGVuIGl0J3MgcHJvYmFibHkKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29t
cGlsYXRpb24gd2FzIGFscmVhZHkgaW52YWxpZGF0ZWQuCisgICAgICAgIGlmICh2YWx1ZS5pc0Ns
ZWFyKCkpCisgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworCisgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgaWYgKHZhbHVlLm1fdmFsdWUpCisgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtMjEyMCw2ICsyMTM3LDggQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSBlZmZlY3Qg
b24gY29tcGlsZSB0aW1lcywgYnV0IHRoaXMgbm9kZSBpcyBGVEwtb25seS4KICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgCisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyXTsKKwogICAgICAgICBBYnN0cmFjdFZhbHVlIGJh
c2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VT
ZXQ7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OwpAQCAtMjEyOSwxOCArMjE0OCwyOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBp
ZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGJhc2VTZXQubWVyZ2Uoc2V0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGdldENh
c2UubWV0aG9kKCkua2luZCgpICE9IEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudCkgewotICAg
ICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBzd2l0Y2ggKGdldENhc2UubWV0aG9kKCkua2luZCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDogeworICAgICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKKyAgICAgICAgICAgICAgICB0aGlzUmVz
dWx0LnNldCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgICAgICAg
ICAgKmdldENhc2UubWV0aG9kKCkuY29uc3RhbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKHRoaXNSZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7Ci0gICAg
ICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAgICAg
ICAgICAgICAgICpnZXRDYXNlLm1ldGhvZCgpLmNvbnN0YW50KCksCi0gICAgICAgICAgICAgICAg
bV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7Ci0gICAgICAgICAgICByZXN1bHQubWVy
Z2UodGhpc1Jlc3VsdCk7CisKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWQ6IHsKKyAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UoCisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0LCB1aWQsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfSB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5jaGFuZ2VTdHJ1Y3R1cmUobV9ncmFwaCwgYmFzZVNldCkg
PT0gQ29udHJhZGljdGlvbikKQEAgLTIxNjMsNiArMjE5Myw4IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIEFic3RyYWN0VmFsdWUgYmFzZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRpbmdW
YWx1ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25z
dCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07CkBAIC0yMTcwLDYgKzIyMDIsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgdGhpc1NldC5maWx0ZXIoYmFzZSk7CiAg
ICAgICAgICAgICBpZiAodGhpc1NldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1ZhbHVlID0gb3JpZ2luYWxWYWx1
ZTsKKyAgICAgICAgICAgIHRoaXNWYWx1ZS5maWx0ZXIobV9ncmFwaCwgdmFyaWFudC5yZXF1aXJl
ZFR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZS5tZXJnZSh0aGlzVmFsdWUpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBpZiAodGhpc1NldC5vbmx5U3Ry
dWN0dXJlKCkgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy5hcHBlbmQoCkBAIC0yMTg1LDYgKzIyMjIsOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9ucyhj
bG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmNoYW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24p
CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKSA9IHJlc3VsdGluZ1ZhbHVlOworICAgICAgICBpZiAoISFvcmlnaW5h
bFZhbHVlICYmICFyZXN1bHRpbmdWYWx1ZSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxp
ZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yMjY0LDEzICsy
MzA0LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBj
YXNlIFB1dEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYg
KCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2Ji
ZXJlZCgpKSB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CiAg
ICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwKICAgICAgICAgICAgICAgICB2YWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwotICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgewogICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7CiAgICAgICAgICAgICAgICAgVHJhbnNpdGlv
blZlY3RvciB0cmFuc2l0aW9uczsKQEAgLTI2MTUsOSArMjY1NSw5IEBAIHZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RT
dGF0ZVR5cGU+CiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpmaWx0ZXIoCi0gICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0KQorICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCwgU3BlY3VsYXRlZFR5cGUgYWRtaXR0ZWRUeXBlcykKIHsKLSAgICBpZiAodmFsdWUu
ZmlsdGVyKG1fZ3JhcGgsIHNldCkgPT0gRmlsdHJhdGlvbk9LKQorICAgIGlmICh2YWx1ZS5maWx0
ZXIobV9ncmFwaCwgc2V0LCBhZG1pdHRlZFR5cGVzKSA9PSBGaWx0cmF0aW9uT0spCiAgICAgICAg
IHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAg
ICByZXR1cm4gQ29udHJhZGljdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE3LDYgKzExNyw1NiBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldFR5cGUoR3JhcGgmIGdyYXBo
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldChH
cmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgZGVzY3JpcHRvcikK
K3sKKyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6OkJvdHRvbToKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBzZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgc2V0
VHlwZShTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkludDMyOgorICAgICAgICBzZXRUeXBlKFNwZWNJbnQzMik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICBzZXRUeXBlKFNwZWNCeXRlY29k
ZU51bWJlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5n
OgorICAgICAgICBzZXQoZ3JhcGgsIGdyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0
dXJlOgorICAgICAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOgorICAgICAgICBzZXQoZ3JhcGgsIGRlc2NyaXB0b3Iuc3RydWN0dXJlKCkpOworICAgICAg
ICBtZXJnZShTcGVjT3RoZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdDoKKyAgICAgICAgc2V0VHlwZShncmFwaCwgU3BlY09iamVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAg
c2V0VHlwZShncmFwaCwgU3BlY09iamVjdCB8IFNwZWNPdGhlcik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICBtYWtlSGVhcFRvcCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoCisgICAgR3JhcGgmIGdyYXBoLCBjb25zdCBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSBjbG9iYmVyU3RhdGUpCit7CisgICAgc2V0KGdyYXBoLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAo
Y2xvYmJlclN0YXRlID09IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKCk7Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2Vu
dGF0aW9uKEdyYXBoJiBncmFwaCwgTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uLCBOb2RlKiBub2Rl
KQogewogICAgIGlmIChyZXByZXNlbnRhdGlvbiA9PSBOb2RlUmVzdWx0RG91YmxlKSB7CkBAIC0x
ODksOCArMjM5LDIyIEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6bWVyZ2VPU1JFbnRyeVZhbHVlKEcK
ICAgICByZXR1cm4gb2xkTWUgIT0gKnRoaXM7CiB9CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJh
Y3RWYWx1ZTo6ZmlsdGVyKEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
K2Jvb2wgQWJzdHJhY3RWYWx1ZTo6aXNUeXBlKEdyYXBoJiBncmFwaCwgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJiBpbmZlcnJlZFR5cGUpIGNvbnN0CiB7CisgICAgQWJzdHJhY3RWYWx1
ZSB0eXBlVmFsdWU7CisgICAgdHlwZVZhbHVlLnNldChncmFwaCwgaW5mZXJyZWRUeXBlKTsKKwor
ICAgIEFic3RyYWN0VmFsdWUgbWVyZ2VkVmFsdWUgPSAqdGhpczsKKyAgICBtZXJnZWRWYWx1ZS5t
ZXJnZSh0eXBlVmFsdWUpOworCisgICAgcmV0dXJuIG1lcmdlZFZhbHVlID09IHR5cGVWYWx1ZTsK
K30KKworRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoCisgICAgR3JhcGgm
IGdyYXBoLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyLCBTcGVjdWxhdGVkVHlwZSBhZG1pdHRl
ZFR5cGVzKQoreworICAgIEFTU0VSVCghKGFkbWl0dGVkVHlwZXMgJiBTcGVjQ2VsbCkpOworICAg
IAogICAgIGlmIChpc0NsZWFyKCkpCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CiAgICAg
CkBAIC0xOTgsNyArMjYyLDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoRwogICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZp
YyB2YWx1ZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA5NjYzCiAgICAgCi0gICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVy
ZXMoKTsKKyAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIHwg
YWRtaXR0ZWRUeXBlczsKICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21T
dHJ1Y3R1cmVzKCk7CiAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKICAgICAKQEAgLTMx
NSw2ICszNzksMTMgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoYwog
ICAgIHJldHVybiBDb250cmFkaWN0aW9uOwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0
VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBBYnN0cmFjdFZhbHVlIGZpbHRlclZhbHVlOworICAgIGZp
bHRlclZhbHVlLnNldChncmFwaCwgZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIGZpbHRlcihmaWx0
ZXJWYWx1ZSk7Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQog
ewogICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIkRG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBA
IC0yMTQsNyArMjE1LDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgbV92YWx1
ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KLSAgICAK
KworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJik7
CisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworCiAgICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRp
b24oR3JhcGgmLCBOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24sIE5vZGUqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oR3JhcGgmLCBOb2RlKik7CiAgICAgCkBA
IC0yODAsMTcgKzI4NCwyNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAg
ICByZXR1cm4gIShtX3R5cGUgJiB+ZGVzaXJlZFR5cGUpOwogICAgIH0KKworICAgIGJvb2wgaXNU
eXBlKEdyYXBoJiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJikgY29uc3Q7CisKKyAg
ICAvLyBGaWx0ZXJzIHRoZSB2YWx1ZSB1c2luZyB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gSWYg
dGhlIGFkbWl0dGVkVHlwZXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCwgdGhpcworICAgIC8vIGlt
cGxpY2l0bHkgZmlsdGVycyBieSB0aGUgdHlwZXMgaW1wbGllZCBieSB0aGUgc3RydWN0dXJlIHNl
dCwgd2hpY2ggYXJlIHVzdWFsbHkgYSBzdWJzZXQgb2YKKyAgICAvLyBTcGVjQ2VsbC4gSGVuY2Us
IGFmdGVyIHRoaXMgY2FsbCwgdGhlIHZhbHVlIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW55IG5vbi1j
ZWxsIG1lbWJlcnMuIEJ1dCwgeW91IGNhbgorICAgIC8vIHVzZSBhZG1pdHRlZFR5cGVzIHRvIHBy
ZXNlcnZlIHNvbWUgbm9uLWNlbGwgdHlwZXMuIE5vdGUgdGhhdCBpdCdzIHdyb25nIGZvciBhZG1p
dHRlZFR5cGVzIHRvIG92ZXJsYXAKKyAgICAvLyB3aXRoIFNwZWNDZWxsLgorICAgIEZpbHRyYXRp
b25SZXN1bHQgZmlsdGVyKEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3BlY3VsYXRlZFR5
cGUgYWRtaXR0ZWRUeXBlcyA9IFNwZWNOb25lKTsKICAgICAKLSAgICBGaWx0cmF0aW9uUmVzdWx0
IGZpbHRlcihHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIEZpbHRyYXRpb25SZXN1
bHQgZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlcihTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVl
KGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIo
Y29uc3QgQWJzdHJhY3RWYWx1ZSYpOworCisgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoR3Jh
cGgmLCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImKTsKICAgICAKICAgICBGaWx0cmF0
aW9uUmVzdWx0IGNoYW5nZVN0cnVjdHVyZShHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwog
ICAgIAogICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKikgY29uc3Q7Ci0gICAgCisKICAgICBi
b29sIHZhbGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNI
ZWFwVG9wKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw5ICsyMDYs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBDaGVja3NG
dW5jdG9yJiBpbnNlcnRDaGVja3MpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0
b3I+CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9w
ZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgY29uc3QgQ2hlY2tz
RnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKLSAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUp
OwotICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgPSBH
ZXRCeU9mZnNldCk7Ci0gICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUs
IE5vZGUqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgUHJvcGVydHlPZmZzZXQsIE5vZGVUeXBl
ID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6
OkRlc2NyaXB0b3ImLCBOb2RlKiB2YWx1ZSk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQo
U3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFBy
b3BlcnR5T2Zmc2V0LCBjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImLCBOb2RlVHlwZSA9
IEdldEJ5T2Zmc2V0KTsKIAogICAgIC8vIENyZWF0ZSBhIHByZXNlbmNlIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uIGJhc2VkIG9uIHNvbWUga25vd24gb2Zmc2V0IGFuZCBzdHJ1Y3R1cmUgc2V0LiBE
b2VzIG5vdAogICAgIC8vIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uZGl0aW9uLCBidXQg
aXQgbWF5IHJldHVybiBhIG51bGwgb25lIGlmIGl0IGVuY291bnRlcnMgYSBjb250cmFkaWN0aW9u
LgpAQCAtMjMwNiw3ICsyMzA1LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3Rh
bnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUg
b3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCisgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYgaW5mZXJyZWRUeXBlLCBOb2RlVHlwZSBvcCkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0
b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCkBAIC0yMzE3LDEzICsyMzE4
LDE3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBTdG9y
YWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsK
ICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7CisgICAgZGF0YS0+aW5mZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBl
OworICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUoaW5mZXJyZWRUeXBlKTsKICAgICAK
ICAgICBOb2RlKiBnZXRCeU9mZnNldCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwogCiAgICAgcmV0dXJuIGdl
dEJ5T2Zmc2V0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQo
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBO
b2RlKiB2YWx1ZSkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9mZnNldCgKKyAg
ICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlLAorICAgIE5vZGUq
IHZhbHVlKQogewogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQob2Zmc2V0KSkKQEAgLTIzMzQsNiArMjMzOSw4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVQdXRCeU9mZnNldCgKICAgICBTdG9yYWdlQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hZGQoKTsKICAgICBkYXRhLT5vZmZzZXQgPSBvZmZzZXQ7
CiAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7CisgICAgZGF0YS0+aW5m
ZXJyZWRUeXBlID0gaW5mZXJyZWRUeXBlOworICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5
cGUoaW5mZXJyZWRUeXBlKTsKICAgICAKICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFB1
dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwog
ICAgIApAQCAtMjQ0OCw3ICsyNDU1LDggQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmxvYWQoCiAg
ICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtZXRob2QuY29uc3Rh
bnQoKSkpOwogICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7
CiAgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8o
bWV0aG9kLnByb3RvdHlwZSgpKSk7Ci0gICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldChw
cmVkaWN0aW9uLCBiYXNlTm9kZSwgaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpLCBv
cCk7CisgICAgICAgIHJldHVybiBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIHByZWRp
Y3Rpb24sIGJhc2VOb2RlLCBpZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCksIEluZmVy
cmVkVHlwZTo6VG9wLCBvcCk7CiAgICAgfQogICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWQ6CiAgICAgICAgIC8vIFdpbGwgbmV2ZXIgc2VlIHRoaXMgZnJvbSBwbGFuTG9hZCgpLgpAQCAt
MjU1NCwxMyArMjU2MiwxMyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6bG9hZCgKICAgICAKICAg
ICBib29sIG5lZWRTdHJ1Y3R1cmVDaGVjayA9IHRydWU7CiAgICAgCisgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKyAg
ICAKICAgICBpZiAoSlNPYmplY3QqIGtub3duQmFzZSA9IGJhc2UtPmR5bmFtaWNDYXN0Q29uc3Rh
bnQ8SlNPYmplY3QqPigpKSB7CiAgICAgICAgIC8vIFRyeSB0byBvcHRpbWl6ZSBhd2F5IHRoZSBz
dHJ1Y3R1cmUgY2hlY2suIE5vdGUgdGhhdCBpdCdzIG5vdCB3b3J0aCBkb2luZyBhbnl0aGluZyBh
Ym91dCB0aGlzCiAgICAgICAgIC8vIGlmIHRoZSBiYXNlJ3Mgc3RydWN0dXJlIGlzIHdhdGNoZWQu
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+Y29uc3RhbnQoKS0+c3RydWN0
dXJlKCk7CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKSB7Ci0gICAg
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lk
ZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIXZhcmlhbnQu
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlJ3JlIGxvYWRpbmcgZnJvbSBhIHByb3RvdHlwZS4gV2UgZXhwZWN0IHRoZSBiYXNl
IG5vdCB0byBoYXZlIHRoZQogICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5LiBXZSBjYW4gb25s
eSB1c2UgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gaWYgYWxsIG9mIHRoZSBzdHJ1Y3R1cmVzIGlu
IHRoZQpAQCAtMjYyNSw5ICsyNjMzLDE4IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpsb2FkKAog
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlND
b25zdGFudChjb25zdGFudCk7CiAgICAgICAgIH0KKworICAgICAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgaW5mZXJyZWRUeXBlOworICAgICAgICBpZiAobmVlZFN0cnVjdHVyZUNoZWNrKSB7
CisgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKSkgeworICAgICAgICAgICAgICAgIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciB0aGlz
VHlwZSA9IG1fZ3JhcGguaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoc3RydWN0dXJlLCB1aWQpOwor
ICAgICAgICAgICAgICAgIGluZmVycmVkVHlwZS5tZXJnZSh0aGlzVHlwZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRU
eXBlOjpUb3A7CiAgICAgICAgIAogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zm
c2V0KAotICAgICAgICAgICAgbG9hZFByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IHZhcmlhbnQub2Zmc2V0KCksIGxvYWRPcCk7CisgICAgICAgICAgICBsb2FkUHJlZGljdGlvbiwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgaW5mZXJyZWRUeXBlLCBs
b2FkT3ApOwogICAgIH0KIAogICAgIHJldHVybiBsb2FkZWRWYWx1ZTsKQEAgLTI2MzgsNyArMjY1
NSw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCAKICAgICBSRUxF
QVNFX0FTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CiAK
ICAgICBjaGVja1ByZXNlbmNlTGlrZShiYXNlLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRp
Zmllcl0sIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQuc3RydWN0dXJlKCkpOwotICAgIHJldHVy
biBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyLCB2YXJpYW50Lm9mZnNldCgpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXIsIHZh
cmlhbnQub2Zmc2V0KCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCksIHZhbHVlKTsKIH0KIAogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKQEAgLTI3OTcsNiArMjgxNCw5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIAogICAgICAgICBpZiAo
bV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigp
LT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworCisgICAgICAgIGZvciAoY29uc3QgUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpCisgICAgICAgICAgICBt
X2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogICAg
ICAgICAKICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVs
dGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPnZhcmlhbnRzID0gcHV0QnlJ
ZFN0YXR1cy52YXJpYW50cygpOwpAQCAtMjg1Myw2ICsyODczLDggQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7CiAgICAgICAgIGRhdGEtPm9mZnNldCA9
IHZhcmlhbnQub2Zmc2V0KCk7CiAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVu
dGlmaWVyTnVtYmVyOworICAgICAgICBkYXRhLT5pbmZlcnJlZFR5cGUgPSB2YXJpYW50LnJlcXVp
cmVkVHlwZSgpOworICAgICAgICBtX2dyYXBoLnJlZ2lzdGVySW5mZXJyZWRUeXBlKGRhdGEtPmlu
ZmVycmVkVHlwZSk7CiAgICAgICAgIAogICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAg
UHV0QnlPZmZzZXQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJz
RXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDYgKzY0LDggQEAgYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZAog
ICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNy
ZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMg
b2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUgdGhlCiAgICAgICAgIC8vIGhl
YXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3Qs
IGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KICAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0NDAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUg
IkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHSW5mZXJyZWRUeXBlQ2hl
Y2suaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5o
IgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTM3Myw3ICszNzQsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5vbmx5
U3RydWN0dXJlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50
LnJlcXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQ4LDYgKzQ1
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpOworICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWVWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDIoKSk7CiAKICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJs
b2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5vZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBi
ZWZvcmUuCiAgICAgICAgICAgICAgICAgYWxyZWFkeUhhbmRsZWQgPSB0cnVlOyAvLyBEb24ndCBh
bGxvdyB0aGUgZGVmYXVsdCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCkBA
IC00NjMsNyArNDY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubnVtVmFy
aWFudHMoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5u
dW1WYXJpYW50cygpID4gMSAmJiAhaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCkBAIC02NDAs
NyArNjQzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgZW1pdEdldEJ5T2Zmc2V0KGluZGV4SW5CbG9j
aywgbm9kZSwgY2hpbGRFZGdlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBlbWl0R2V0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJbkJs
b2NrLCBOb2RlKiBub2RlLCBFZGdlIGNoaWxkRWRnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHZvaWQgZW1pdEdldEJ5T2Zmc2V0KAorICAg
ICAgICB1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUsIEVkZ2UgY2hpbGRFZGdlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAorICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRU
eXBlOjpUb3ApCiAgICAgewogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOwogICAgICAgICAKQEAgLTY1Niw2ICs2NjEsNyBAQCBwcml2YXRlOgogICAgICAgICBTdG9y
YWdlQWNjZXNzRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYWRkKCk7
CiAgICAgICAgIGRhdGEub2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICBkYXRhLmlkZW50aWZpZXJO
dW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBkYXRhLmluZmVycmVkVHlwZSA9IGlu
ZmVycmVkVHlwZTsKICAgICAgICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0
KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CiAgICAgfQpAQCAtNjY0LDggKzY3MCwxMCBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAg
ICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGluc2VydEluZmVycmVkVHlwZUNoZWNrKAorICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3JpZ2luLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCksIHZhcmlhbnQucmVxdWlyZWRUeXBlKCkpOwogCiAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtp
bmQoS25vd25DZWxsVXNlKTsKQEAgLTczMCw2ICs3MzgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgLy8gQXJpc2VzIHdoZW4gd2UgcHJ1bmUgTXVsdGlHZXRCeU9mZnNldC4gV2UgY291bGQgaGF2
ZSBhCiAgICAgICAgICAgICAvLyBNdWx0aUdldEJ5T2Zmc2V0IHdpdGggYSBzaW5nbGUgdmFyaWFu
dCB0aGF0IGNoZWNrcyBmb3Igc3RydWN0dXJlIFMsCiAgICAgICAgICAgICAvLyBhbmQgdGhlIGlu
cHV0IGhhcyBzdHJ1Y3R1cmVzIFMgYW5kIFQsIGZvciBleGFtcGxlLgorICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1
cmUsIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoc2V0KSksIG5vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEluZmVycmVkVHlwZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlX2gKKyNk
ZWZpbmUgREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBkb2N1bWVudHMgdGhlIERG
RydzIGV4cGVjdGF0aW9uIGZvciBhbiBJbmZlcnJlZFR5cGU6IHNwZWNpZmljYWxseSwgdGhhdCB3
ZSB3YW50IGl0IHRvIGhhdmUgYSBsaXZlCisvLyBJbmZlcnJlZFR5cGUgb2JqZWN0IGFuZCB0aGF0
IHRoaXMgb2JqZWN0IGhhcyB0aGUgdHlwZSB0aGF0IHdlIG9yaWdpbmFsbHkgc2F3LgorCitjbGFz
cyBEZXNpcmVkSW5mZXJyZWRUeXBlIHsKK3B1YmxpYzoKKyAgICBEZXNpcmVkSW5mZXJyZWRUeXBl
KCkKKyAgICAgICAgOiBtX29iamVjdChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
RGVzaXJlZEluZmVycmVkVHlwZShJbmZlcnJlZFR5cGUqIG9iamVjdCwgY29uc3QgSW5mZXJyZWRU
eXBlOjpEZXNjcmlwdG9yJiBleHBlY3RlZCkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisg
ICAgICAgICwgbV9leHBlY3RlZChleHBlY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgRGVzaXJl
ZEluZmVycmVkVHlwZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDog
bV9vYmplY3QobnVsbHB0cikKKyAgICAgICAgLCBtX2V4cGVjdGVkKEluZmVycmVkVHlwZTo6VG9w
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3QgJiYgbV9leHBlY3RlZDsgfQorCisgICAgSW5mZXJyZWRUeXBlKiBvYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciBleHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWQ7IH0KKworICAgIGJvb2wg
aXNTdGlsbFZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdC0+Y2Fu
V2F0Y2gobV9leHBlY3RlZCk7CisgICAgfQorCisgICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0
Y2hwb2ludCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fb2JqZWN0LT5hZGRXYXRjaHBvaW50KHdh
dGNocG9pbnQpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNpcmVkSW5m
ZXJyZWRUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdCA9
PSBvdGhlci5tX29iamVjdAorICAgICAgICAgICAgJiYgbV9leHBlY3RlZCA9PSBvdGhlci5tX2V4
cGVjdGVkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNpcmVkSW5mZXJy
ZWRUeXBlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhbV9vYmplY3QgJiYgbV9leHBlY3RlZCA9PSBJbmZlcnJl
ZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8SW5mZXJyZWRUeXBlKj46Omhhc2gobV9vYmplY3Qp
ICsgbV9leHBlY3RlZC5oYXNoKCkgKiA3OworICAgIH0KKworICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3RlZCwgY29udGV4dCksICIgZm9yICIs
IFJhd1BvaW50ZXIobV9vYmplY3QpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRy
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRUeXBlKiBtX29iamVjdDsKKyAgICBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3IgbV9leHBlY3RlZDsKK307CisKK3N0cnVjdCBEZXNpcmVk
SW5mZXJyZWRUeXBlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRGVzaXJl
ZEluZmVycmVkVHlwZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYgYSwgY29uc3QgRGVzaXJlZEluZmVy
cmVkVHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2Fm
ZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6
OkRlc2lyZWRJbmZlcnJlZFR5cGU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpEZXNpcmVkSW5m
ZXJyZWRUeXBlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpEZXNpcmVk
SW5mZXJyZWRUeXBlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6RGVzaXJlZElu
ZmVycmVkVHlwZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRGVzaXJlZEluZmVycmVkVHlwZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTEgQEAg
dm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOgogICAgIH0KIH0KIAordm9p
ZCBJbmZlcnJlZFR5cGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IERl
c2lyZWRJbmZlcnJlZFR5cGUmIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIGtleS5h
ZGQoY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spKTsKK30KKwogRGVzaXJlZFdhdGNo
cG9pbnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRl
c2lyZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC05Myw2ICs5OCwxMSBAQCB2b2lkIERlc2lyZWRX
YXRjaHBvaW50czo6YWRkTGF6aWx5KGNvbnN0CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMu
YWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHko
Y29uc3QgRGVzaXJlZEluZmVycmVkVHlwZSYga2V5KQoreworICAgIG1faW5mZXJyZWRUeXBlcy5h
ZGRMYXppbHkoa2V5KTsKK30KKwogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRj
aCgpKQpAQCAtMTA4LDYgKzExOCw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlB
ZGQoQ29kZUIKICAgICBtX2luZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1v
bkRhdGEpOwogICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0
YSk7CiAgICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29t
bW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFR5cGVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1v
bkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNv
bnN0CkBAIC0xMTYsNyArMTI3LDggQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxs
VmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAg
ICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVmZmVy
Vmlld3MuYXJlU3RpbGxWYWxpZCgpCi0gICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRz
LmFyZVN0aWxsVmFsaWQoKTsKKyAgICAgICAgJiYgbV9hZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJl
U3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRUeXBlcy5hcmVTdGlsbFZhbGlkKCk7
CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdApAQCAtMTI3LDYgKzEzOSw3IEBAIHZv
aWQgRGVzaXJlZFdhdGNocG9pbnRzOjpkdW1wSW5Db250ZXh0KFAKICAgICBvdXQucHJpbnQoIiAg
ICBJbmZlcnJlZCB2YWx1ZXM6ICIsIGluQ29udGV4dChtX2luZmVycmVkVmFsdWVzLCBjb250ZXh0
KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgQnVmZmVyIHZpZXdzOiAiLCBpbkNvbnRleHQo
bV9idWZmZXJWaWV3cywgY29udGV4dCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIE9iamVj
dCBwcm9wZXJ0eSBjb25kaXRpb25zOiAiLCBpbkNvbnRleHQobV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMsIGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIiAgICBJbmZlcnJlZCB0eXBlczog
IiwgaW5Db250ZXh0KG1faW5mZXJyZWRUeXBlcywgY29udGV4dCksICJcbiIpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRl
ICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHRGVzaXJlZEluZmVycmVkVHlwZS5oIgog
I2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5o
IgogI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCkBAIC05MSw2ICs5MiwxOCBA
QCBzdHJ1Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvCiAgICAgfQogfTsKIAor
c3RydWN0IEluZmVycmVkVHlwZUFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxv
Y2sqLCBjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRp
YyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gIWtleS5pc1N0aWxsVmFsaWQoKTsKKyAgICB9CisgICAg
c3RhdGljIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBEZXNpcmVk
SW5mZXJyZWRUeXBlJiBrZXksIER1bXBDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAg
b3V0LnByaW50KGluQ29udGV4dChrZXksIGNvbnRleHQpKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0VHlwZSwgdHlwZW5hbWUgQWRhcHRvciA9IFNldFBvaW50
ZXJBZGFwdG9yPFdhdGNocG9pbnRTZXRUeXBlPj4KIGNsYXNzIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHMgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE1OSw2ICsxNzIsMTAgQEAgcHVibGlj
OgogICAgIC8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgY2FsbCB0aGlzIGRpcmVj
dGx5LiBVc2UgR3JhcGg6OndhdGNoQ29uZGl0aW9uKCksIHdoaWNoIGRvZXMKICAgICAvLyB0aGUg
cmVxdWlyZWQgR0MgbWFnaWMgYXMgd2VsbCBhcyBzb21lIG90aGVyIGJvb2trZWVwaW5nLgogICAg
IHZvaWQgYWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisKKyAgICAv
LyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gVXNl
IEdyYXBoOjppbmZlcnJlZFR5cGVGb3IoKSwgd2hpY2ggZG9lcworICAgIC8vIHRoZSByZXF1aXJl
ZCBHQyBtYWdpYy4KKyAgICB2b2lkIGFkZExhemlseShjb25zdCBEZXNpcmVkSW5mZXJyZWRUeXBl
Jik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAgICAKQEAgLTE4Niw2
ICsyMDMsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLmlzV2F0Y2hlZChrZXkpOwogICAgIH0KKyAgICBib29sIGlzV2F0Y2hlZChjb25z
dCBEZXNpcmVkSW5mZXJyZWRUeXBlJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbmZl
cnJlZFR5cGVzLmlzV2F0Y2hlZChrZXkpOworICAgIH0KIAogICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CkBAIC0xOTYsNiArMjE3LDcgQEAgcHJpdmF0ZToKICAgICBHZW5lcmlj
RGVzaXJlZFdhdGNocG9pbnRzPEluZmVycmVkVmFsdWUqLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4g
bV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlC
dWZmZXJWaWV3KiwgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmll
d3M7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biwgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcj4gbV9hZGFwdGl2ZVN0cnVjdHVy
ZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxEZXNpcmVkSW5mZXJyZWRUeXBl
LCBJbmZlcnJlZFR5cGVBZGFwdG9yPiBtX2luZmVycmVkVHlwZXM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5o
IgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaCIKQEAgLTEwOTIsNiArMTA5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBpbnNlcnRJbmZl
cnJlZFR5cGVDaGVjaygKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldCwgbV9pbmRleElu
QmxvY2ssIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQzKCkubm9kZSgpLAorICAgICAgICAgICAg
ICAgIG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCkuaW5mZXJyZWRUeXBlKTsKICAgICAgICAgICAg
IHNwZWN1bGF0ZUZvckJhcnJpZXIobm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDEyICsyNjEsMTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFn
ZUFjY2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwogICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJpZCIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7Iiwg
aWRlbnRpZmllcnMoKVtzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsK
ICAgICAgICAgb3V0LnByaW50KCIsICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFj
Y2Vzc0RhdGEub2Zmc2V0KSk7CisgICAgICAgIG91dC5wcmludCgiLCBpbmZlcnJlZFR5cGUgPSAi
LCBpbkNvbnRleHQoc3RvcmFnZUFjY2Vzc0RhdGEuaW5mZXJyZWRUeXBlLCBjb250ZXh0KSk7CiAg
ICAgfQogICAgIGlmIChub2RlLT5oYXNNdWx0aUdldEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAg
IE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIs
ICJ7IiwgaWRlbnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRl
eHQpKTsKKyAgICAgICAgICAgIGlmIChkYXRhLmNhc2VzW2ldLm1ldGhvZCgpLmtpbmQoKSA9PSBH
ZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoaW5m
ZXJyZWQgdmFsdWUgPSAiLCBpbkNvbnRleHQoaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGRhdGEu
Y2FzZXNbaV0uc2V0KCksIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSksIGNv
bnRleHQpLCAiKSIpOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0g
bm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKQEAgLTg4Nyw2ICs4OTEsMzggQEAgYm9vbCBH
cmFwaDo6aXNTYWZlVG9Mb2FkKEpTT2JqZWN0KiBiYXNlLAogICAgIHJldHVybiBtX3NhZmVUb0xv
YWQuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmFzZSwgb2Zmc2V0KSk7CiB9CiAKK0luZmVycmVk
VHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5mZXJyZWRUeXBlRm9yKGNvbnN0IFByb3BlcnR5VHlw
ZUtleSYga2V5KQoreworICAgIGFzc2VydElzUmVnaXN0ZXJlZChrZXkuc3RydWN0dXJlKCkpOwor
ICAgIAorICAgIGF1dG8gaXRlciA9IG1faW5mZXJyZWRUeXBlcy5maW5kKGtleSk7CisgICAgaWYg
KGl0ZXIgIT0gbV9pbmZlcnJlZFR5cGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFs
dWU7CisKKyAgICBJbmZlcnJlZFR5cGUqIHR5cGVPYmplY3QgPSBrZXkuc3RydWN0dXJlKCktPmlu
ZmVycmVkVHlwZUZvcihrZXkudWlkKCkpOworICAgIGlmICghdHlwZU9iamVjdCkgeworICAgICAg
ICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgSW5mZXJyZWRUeXBlOjpUb3ApOworICAgICAgICBy
ZXR1cm4gSW5mZXJyZWRUeXBlOjpUb3A7CisgICAgfQorCisgICAgSW5mZXJyZWRUeXBlOjpEZXNj
cmlwdG9yIHR5cGVEZXNjcmlwdG9yID0gdHlwZU9iamVjdC0+ZGVzY3JpcHRvcigpOworICAgIGlm
ICh0eXBlRGVzY3JpcHRvci5raW5kKCkgPT0gSW5mZXJyZWRUeXBlOjpUb3ApIHsKKyAgICAgICAg
bV9pbmZlcnJlZFR5cGVzLmFkZChrZXksIEluZmVycmVkVHlwZTo6VG9wKTsKKyAgICAgICAgcmV0
dXJuIEluZmVycmVkVHlwZTo6VG9wOworICAgIH0KKyAgICAKKyAgICBtX2luZmVycmVkVHlwZXMu
YWRkKGtleSwgdHlwZURlc2NyaXB0b3IpOworCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFk
ZExhemlseSh0eXBlT2JqZWN0KTsKKyAgICByZWdpc3RlckluZmVycmVkVHlwZSh0eXBlRGVzY3Jp
cHRvcik7CisKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGFscmVhZHkgYmUgd2F0Y2hpbmcgdGhp
cyBkZXNpcmVkIGluZmVycmVkIHR5cGUsIGJlY2F1c2UgbXVsdGlwbGUgc3RydWN0dXJlcyBtYXkK
KyAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBJbmZlcnJlZFR5cGUgaW5zdGFuY2UuCisgICAgbV9w
bGFuLndhdGNocG9pbnRzLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3Qs
IHR5cGVEZXNjcmlwdG9yKSk7CisKKyAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7Cit9CisKIEZ1
bGxCeXRlY29kZUxpdmVuZXNzJiBHcmFwaDo6bGl2ZW5lc3NGb3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVj
b2RlTGl2ZW5lc3M+Pjo6aXRlcmF0b3IgaXRlciA9IG1fYnl0ZWNvZGVMaXZlbmVzcy5maW5kKGNv
ZGVCbG9jayk7CkBAIC0xMDYxLDcgKzEwOTcsNyBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25z
dGFudFByb3BlcnR5KEpTCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAog
ICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8
IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CisgICAgaWYgKHN0cnVjdHVyZS5pc0luZmluaXRl
KCkpIHsKICAgICAgICAgLy8gRklYTUU6IElmIHdlIGp1c3QgY29udmVydGVkIHRoZSBvZmZzZXQg
dG8gYSB1aWQsIHdlIGNvdWxkIGRvIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uCiAgICAgICAgIC8v
IHdhdGNoaW5nIHRvIGNvbnN0YW50LWZvbGQgdGhlIHByb3BlcnR5LgogICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MjcxCkBAIC0xMDc2LDYgKzEx
MTIsMzcgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjbwogICAgIHJl
dHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UubV92YWx1ZSwgYmFzZS5tX3N0cnVjdHVy
ZSwgb2Zmc2V0KTsKIH0KIAorQWJzdHJhY3RWYWx1ZSBHcmFwaDo6aW5mZXJyZWRWYWx1ZUZvclBy
b3BlcnR5KAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBBYnN0cmFj
dFZhbHVlIHJlc3VsdDsKKyAgICBiYXNlLmZvckVhY2goCisgICAgICAgIFsmXSAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAg
ICAgICB2YWx1ZS5zZXQoKnRoaXMsIGluZmVycmVkVHlwZUZvclByb3BlcnR5KHN0cnVjdHVyZSwg
dWlkKSk7CisgICAgICAgICAgICByZXN1bHQubWVyZ2UodmFsdWUpOworICAgICAgICB9KTsKKyAg
ICBpZiAoY2xvYmJlclN0YXRlID09IFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQpCisgICAgICAgIHJl
c3VsdC5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Fic3Ry
YWN0VmFsdWUgR3JhcGg6OmluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eSgKKyAgICBjb25zdCBBYnN0
cmFjdFZhbHVlJiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsCisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3sKKyAgICBp
ZiAoSlNWYWx1ZSB2YWx1ZSA9IHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZSwgb2Zmc2V0KSkg
eworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnNldCgqdGhp
cywgKmZyZWV6ZSh2YWx1ZSksIGNsb2JiZXJTdGF0ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgaWYgKGJhc2UubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkKKyAgICAgICAg
cmV0dXJuIGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShiYXNlLm1fc3RydWN0dXJlLnNldCgpLCB1
aWQsIGNsb2JiZXJTdGF0ZSk7CisKKyAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZTo6aGVhcFRvcCgp
OworfQorCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBi
YXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CiAgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBj
b25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29k
ZVBhcnNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgor
I2luY2x1ZGUgIkRGR1Byb3BlcnR5VHlwZUtleS5oIgogI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5o
IgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5o
IgpAQCAtNjc1LDYgKzY3NiwyNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2hlY2tzIGlmIGl0J3Mga25v
d24gdGhhdCBsb2FkaW5nIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0
IGlzIGZpbmUuIFRoaXMgaXMKICAgICAvLyBjb21wdXRlZCBieSB0cmFja2luZyB3aGljaCBjb25k
aXRpb25zIHdlIHRyYWNrIHdpdGggd2F0Y2hDb25kaXRpb24oKS4KICAgICBib29sIGlzU2FmZVRv
TG9hZChKU09iamVjdCogYmFzZSwgUHJvcGVydHlPZmZzZXQpOworCisgICAgdm9pZCByZWdpc3Rl
ckluZmVycmVkVHlwZShjb25zdCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAg
eworICAgICAgICBpZiAodHlwZS5zdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyU3Ry
dWN0dXJlKHR5cGUuc3RydWN0dXJlKCkpOworICAgIH0KKworICAgIC8vIFRlbGxzIHVzIHdoYXQg
aW5mZXJyZWQgdHlwZSB3ZSBhcmUgYWJsZSB0byBwcm92ZSB0aGUgcHJvcGVydHkgdG8gaGF2ZSBu
b3cgYW5kIGluIHRoZSBmdXR1cmUuCisgICAgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yIGluZmVy
cmVkVHlwZUZvcihjb25zdCBQcm9wZXJ0eVR5cGVLZXkmKTsKKyAgICBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3IgaW5mZXJyZWRUeXBlRm9yUHJvcGVydHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgeworICAgICAgICByZXR1cm4gaW5mZXJyZWRUeXBl
Rm9yKFByb3BlcnR5VHlwZUtleShzdHJ1Y3R1cmUsIHVpZCkpOworICAgIH0KKworICAgIEFic3Ry
YWN0VmFsdWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSA9IFN0cnVjdHVyZXNBcmVXYXRjaGVkKTsKKworICAgIC8vIFRoaXMgdXNlcyBlaXRoZXIgY29u
c3RhbnQgcHJvcGVydHkgaW5mZXJlbmNlIG9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNlIHRvIGRl
cml2ZSBhIGdvb2QgYWJzdHJhY3QKKyAgICAvLyB2YWx1ZSBmb3Igc29tZSBwcm9wZXJ0eSBhY2Nl
c3NlZCB3aXRoIHRoZSBnaXZlbiBhYnN0cmFjdCB2YWx1ZSBiYXNlLgorICAgIEFic3RyYWN0VmFs
dWUgaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KAorICAgICAgICBjb25zdCBBYnN0cmFjdFZhbHVl
JiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJl
Q2xvYmJlclN0YXRlKTsKICAgICAKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgbGl2ZW5lc3NG
b3IoQ29kZUJsb2NrKik7CiAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGxpdmVuZXNzRm9yKElu
bGluZUNhbGxGcmFtZSopOwpAQCAtODU2LDYgKzg3OCw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFw
PENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0
ZWNvZGVMaXZlbmVzczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxC
eXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpT
T2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CisgICAgSGFzaE1hcDxQcm9w
ZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwog
ICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwogICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQ
b3N0TnVtYmVyaW5nOwogICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5mZXJyZWRUeXBlQ2hlY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbmZlcnJlZFR5
cGVDaGVjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdJbmZlcnJlZFR5cGVDaGVjay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBpbnNlcnRJbmZlcnJlZFR5cGVDaGVjaygKKyAgICBJbnNlcnRpb25TZXQmIGlu
c2VydGlvblNldCwgdW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgTm9kZSog
YmFzZU5vZGUsCisgICAgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQorewor
ICAgIGluc2VydGlvblNldC5ncmFwaCgpLnJlZ2lzdGVySW5mZXJyZWRUeXBlKHR5cGUpOworICAg
IAorICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90
dG9tOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25l
LCBGb3JjZU9TUkV4aXQsIG9yaWdpbik7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2Rl
SW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBCb29sZWFuVXNl
KSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ss
IG9yaWdpbiwgRWRnZShiYXNlTm9kZSwgT3RoZXJVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBJ
bnQzMlVzZSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVt
YmVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25l
LCBDaGVjaywgb3JpZ2luLCBFZGdlKGJhc2VOb2RlLCBOdW1iZXJVc2UpKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwgRWRnZShi
YXNlTm9kZSwgU3RyaW5nVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBv
cmlnaW4sCisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0
dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUsIENl
bGxVc2UpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVj
dFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4s
CisgICAgICAgICAgICBPcEluZm8oaW5zZXJ0aW9uU2V0LmdyYXBoKCkuYWRkU3RydWN0dXJlU2V0
KHR5cGUuc3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIEVkZ2UoYmFzZU5vZGUsIENlbGxPck90
aGVyVXNlKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3Q6CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUs
IENoZWNrLCBvcmlnaW4sIEVkZ2UoYmFzZU5vZGUsIE9iamVjdFVzZSkpOworICAgICAgICByZXR1
cm47CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjoKKyAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG9yaWdpbiwg
RWRnZShiYXNlTm9kZSwgT2JqZWN0T3JPdGhlclVzZSkpOworICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
REZHX0NSQVNIKGluc2VydGlvblNldC5ncmFwaCgpLCBiYXNlTm9kZSwgIkJhZCBpbmZlcnJlZCB0
eXBlIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luZmVycmVk
VHlwZUNoZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bmZlcnJlZFR5cGVDaGVjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbmZlcnJlZFR5cGVDaGVjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IERGR0luZmVycmVkVHlwZUNoZWNrX2gKKyNkZWZpbmUgREZHSW5mZXJyZWRUeXBlQ2hlY2tfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCisvLyBJbnNlcnRzIGEgdHlwZSBjaGVjayB0aGF0IGVuc3VyZXMgdGhhdCBiYXNlTm9kZSBo
YXMgdGhlIGdpdmVuIGluZmVycmVkIHR5cGUuCit2b2lkIGluc2VydEluZmVycmVkVHlwZUNoZWNr
KAorICAgIEluc2VydGlvblNldCYsIHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiwgTm9k
ZSogYmFzZU5vZGUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0luZmVycmVkVHlwZUNoZWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBzdHJ1Y3QgQmFzaWNC
bG9jazsKIHN0cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0OwogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CisKKyAgICAvLyBUaGlzIG5lZWRz
IHRvIGtub3cgdGhlIGluZmVycmVkIHR5cGUuIEZvciBwdXRzLCB0aGlzIGlzIG5lY2Vzc2FyeSBi
ZWNhdXNlIHdlIG5lZWQgdG8gcmVtZW1iZXIKKyAgICAvLyB3aGF0IGNoZWNrIGlzIG5lZWRlZC4g
Rm9yIGdldHMsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIEFJIG1pZ2h0IGZv
cmdldCB3aGF0IHR5cGUgaXMKKyAgICAvLyBndWFyYW50ZWVkLgorICAgIEluZmVycmVkVHlwZTo6
RGVzY3JpcHRvciBpbmZlcnJlZFR5cGU7CiB9OwogCiBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERh
dGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxOTAwNTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTM1LDE0ICsyMTM1LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsK
ICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBj
dXJyZW50T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG91ciBh
bmFseXNpcyB0cmVhdHMgTXVsdGlQdXRCeU9mZnNldCBsaWtlIGFuIGVzY2FwZSwgd2Ugb25seSBo
YXZlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWFsIHdpdGggc3RvcmluZyByZXN1
bHRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgc3RvcmVkIGJ5IFB1dEJ5T2Zmc2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhvc2Ugbm9kZXMgd2VyZSBndWFy
ZGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSB0eXBlIGNoZWNrcy4gVGhpcyBtZWFucyB0aGF0CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBjYW4gc2ltcGx5IHRydXN0
IHRoYXQgdGhlIGluY29taW5nIHZhbHVlIGhhcyB0aGUgcmlnaHQgdHlwZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZm9yIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBhcmUgdXNpbmcuCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBlbmQoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoY3VycmVudFNldCwgY3VycmVu
dE9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50Ojpy
ZXBsYWNlKGN1cnJlbnRTZXQsIGN1cnJlbnRPZmZzZXQsIEluZmVycmVkVHlwZTo6VG9wKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNldC5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBQdXRCeUlk
VmFyaWFudDo6cmVwbGFjZShjdXJyZW50U2V0LCBjdXJyZW50T2Zmc2V0LCBJbmZlcnJlZFR5cGU6
OlRvcCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGRO
b2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wZXJ0eVR5cGVLZXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BlcnR5VHlw
ZUtleS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
ZXJ0eVR5cGVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Byb3BlcnR5
VHlwZUtleV9oCisjZGVmaW5lIERGR1Byb3BlcnR5VHlwZUtleV9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBvYmplY3QgaXMg
YSBrZXkgZm9yIGZpbmRpbmcgYSBwcm9wZXJ0eSdzIHR5cGUuIEl0J3MgYSB0dXBsZSBvZiBTdHJ1
Y3R1cmUqIGFuZCBVbmlxdWVkU3RyaW5nSW1wbCouCisKK2NsYXNzIFByb3BlcnR5VHlwZUtleSB7
CitwdWJsaWM6CisgICAgUHJvcGVydHlUeXBlS2V5KCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShu
dWxscHRyKQorICAgICAgICAsIG1fdWlkKG51bGxwdHIpCisgICAgeworICAgIH0KKworICAgIFBy
b3BlcnR5VHlwZUtleShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgICwgbV91aWQodWlk
KQorICAgIHsKKyAgICB9CisKKyAgICBQcm9wZXJ0eVR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwg
bV91aWQoZGVsZXRlZFVJRCgpKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgJiYgbV91aWQ7IH0KKworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBQcm9wZXJ0eVR5cGVLZXkmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlCisgICAgICAg
ICAgICAmJiBtX3VpZCA9PSBvdGhlci5tX3VpZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgUHJvcGVydHlUeXBlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2go
bV9zdHJ1Y3R1cmUpICsgV1RGOjpQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gobV91
aWQpOworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0cnVjdHVyZSAmJiBtX3VpZCA9PSBkZWxldGVkVUlE
KCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KHBvaW50
ZXJEdW1wSW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSwgIisiLCBtX3VpZCk7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBVbmlxdWVkU3RyaW5nSW1wbCogZGVsZXRlZFVJRCgpCisgICAgeworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KDEpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICBVbmlx
dWVkU3RyaW5nSW1wbCogbV91aWQ7Cit9OworCitzdHJ1Y3QgUHJvcGVydHlUeXBlS2V5SGFzaCB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUHJvcGVydHlUeXBlS2V5JiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm9wZXJ0
eVR5cGVLZXkmIGEsIGNvbnN0IFByb3BlcnR5VHlwZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OlByb3BlcnR5VHlwZUtleT4geworICAgIHR5cGVk
ZWYgSlNDOjpERkc6OlByb3BlcnR5VHlwZUtleUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OkRGRzo6UHJvcGVydHlUeXBlS2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6
OkRGRzo6UHJvcGVydHlUeXBlS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Byb3BlcnR5VHlwZUtleV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
UmVhbE51bWJlclVzZToKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAgICBjYXNlIENl
bGxVc2U6CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0
VXNlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0
VXNlOgpAQCAtMTI3LDYgKzEyOCw5IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBpZiAoIXNhZmVUb0V4ZWN1dGVFZGdlLnJlc3VsdCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBOT1RFOiBUaGlzIHRlbmRzIHRvIGxpZSB3aGVuIGl0IGNv
bWVzIHRvIGVmZmVjdGZ1bCBub2RlcywgYmVjYXVzZSBpdCBrbm93cyB0aGF0IHRoZXkgYXJlbid0
IGdvaW5nIHRvCisgICAgLy8gZ2V0IGhvaXN0ZWQgYW55d2F5LgorCiAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MDEs
MzYgKzM5MDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAwLAotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFdlYWtQdHIoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3Ry
dWN0dXJlU2V0KClbMF0pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc3RydWN0dXJlLmdwcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytp
KQotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29t
cGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAw
LAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLT5zdHJ1Y3R1
cmVTZXQoKS5sYXN0KCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAg
ICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MTYs
MzggKzM5MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7Ci0gICAgICAgIAotICAg
ICAgICBFeGl0S2luZCBleGl0S2luZDsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXND
b25zdGFudCgpKQotICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25zdGFudENhY2hlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOwotICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChiYXNlLmdwcigpKSwgMCwKLSAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hXZWFrU3RydWN0dXJlKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90
RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3By
KCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnN0cnVjdHVyZVNldCgpWzBdKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kp
Ci0gICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1N0cnVjdHVyZShK
SVRDb21waWxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgZXhpdEtpbmQsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UuZ3ByKCkpLCAwLAot
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgbm9kZS0+c3RydWN0dXJlU2V0
KCkubGFzdCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAg
Y29tcGlsZUNoZWNrU3RydWN0dXJlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjMyLDYgKzUyMzIsODEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVR5cGVPZihOb2RlKgogICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNo
ZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUsIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQUikK
K3sKKyAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKKyAgICAKKyAgICBp
ZiAobm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIEJhZENhY2hlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChjZWxsR1BSKSwgMCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoCisg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
CisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1BSVGVtcG9yYXJ5PiBzdHJ1Y3R1cmU7CisgICAg
ICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFI7CisgICAgICAgIAorICAgICAgICBpZiAodGVtcEdQUiA9
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBzdGQ6Om1ha2VfdW5p
cXVlPEdQUlRlbXBvcmFyeT4odGhpcyk7CisgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUtPmdwcigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUdQUiA9
IHRlbXBHUFI7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc3RydWN0dXJlR1BS
KTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgICAg
ICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5z
aXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKAorICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFdlYWtTdHJ1Y3R1cmUoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1
cmVHUFIsIG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRDYWNoZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIDAsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hX
ZWFrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3Ry
dWN0dXJlR1BSLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNoZWNrU3RydWN0dXJlKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNl
bGxVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2RlLCBjZWxsLmdwcigp
LCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgICAgICBKU1ZhbHVl
UmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY2VsbCA9IG1f
aml0LmJyYW5jaElmQ2VsbCh2YWx1ZVJlZ3MpOworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgIHZhbHVlUmVncywgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVy
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIp
KTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAg
ICAgY2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZShub2Rl
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJC
YWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKQEAgLTU2MzYsNiArNTcxMSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVDZWxsKEVkZ2UgCiAgICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5n
cHIoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRn
ZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVj
T3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoSWZDZWxsKG9wZXJhbmQuanNWYWx1
ZVJlZ3MoKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIG9wZXJhbmQuanNWYWx1ZVJl
Z3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgIG1faml0LmJyYW5jaElm
Tm90T3RoZXIob3BlcmFuZC5qc1ZhbHVlUmVncygpLCB0ZW1wR1BSKSk7CisgICAgb2subGluaygm
bV9qaXQpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3QoRWRnZSBl
ZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCkpCkBAIC01
OTE2LDYgKzYwMDcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVk
CiAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVDZWxs
T3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxOTAw
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTIyMTUsNiArMjIxNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBp
bGVJc09iamVjdE9yTnVsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlVHlwZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDaGVj
a1N0cnVjdHVyZShOb2RlKiwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICB2
b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1
ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpAQCAtMjM3NCw2ICsy
Mzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsK
ICAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxs
KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlKTsK
ICAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQs
NyArMzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgICAgICAgICAgLy8gVGhlc2UgYWxsb2NhdGUgYnV0IHRoZW4gcnVuIHRoZWlyIG93biBiYXJy
aWVyLgotICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4aXQobV9ub2Rl
SW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgbV9u
b2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKQEAgLTQ4MSwxMSArNDgxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgaW5zZXJ0QmFy
cmllcihtX25vZGVJbmRleCwgYmFzZSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNlcnRCYXJyaWVy
V2l0aEludmFsaWRFeGl0KHVuc2lnbmVkIG5vZGVJbmRleCwgRWRnZSBiYXNlKQotICAgIHsKLSAg
ICAgICAgaW5zZXJ0QmFycmllcihub2RlSW5kZXgsIGJhc2UsIGZhbHNlKTsKLSAgICB9Ci0KICAg
ICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UsIGJvb2wg
ZXhpdE9LID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIC8vIElmIHdlJ3JlIGluIGdsb2JhbCBtb2Rl
LCB3ZSBzaG91bGQgb25seSBpbnNlcnQgdGhlIGJhcnJpZXJzIG9uY2Ugd2UgaGF2ZSBjb252ZXJn
ZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogb3Bl
cmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLSAgICAKKwogICAgIC8v
IEluIG1vc3QgY2FzZXMsIHdoYXQgeW91IHJlYWxseSB3YW50IHRvIGRvIGlzIHZlcmlmeSB3aGV0
aGVyIHRoZSBzZXQgaXMgdG9wIG9yIGNsb2JiZXJlZCwgYW5kCiAgICAgLy8gaWYgbm90LCBlbnVt
ZXJhdGUgdGhlIHNldCBvZiBzdHJ1Y3R1cmVzLiBVc2UgdGhpcyBvbmx5IGluIGNhc2VzIHdoZXJl
IHRoZSBzaW5nbGV0b24gY2FzZSBpcwogICAgIC8vIG1lYW5pbmdmdWxseSBzcGVjaWFsLCBsaWtl
IGZvciB0cmFuc2l0aW9ucy4KQEAgLTIwMiw2ICsyMDIsMTMgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBtX3NldC5vbmx5U3RydWN0dXJlKCk7
CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVh
Y2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
aXNUb3AoKSk7CisgICAgICAgIG1fc2V0LmZvckVhY2goZnVuY3Rvcik7CisgICAgfQogICAgIAog
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYg
Kzc5LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNh
c2UgS25vd25DZWxsVXNlOgogICAgICAgICBvdXQucHJpbnQoIktub3duQ2VsbCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKKyAgICAgICAgb3V0LnByaW50KCJD
ZWxsT3JPdGhlciIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBPYmplY3RVc2U6CiAgICAg
ICAgIG91dC5wcmludCgiT2JqZWN0Iik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiAr
NTEsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtub3duQm9vbGVhblVzZSwKICAgICBDZWxsVXNl
LAogICAgIEtub3duQ2VsbFVzZSwKKyAgICBDZWxsT3JPdGhlclVzZSwKICAgICBPYmplY3RVc2Us
CiAgICAgRnVuY3Rpb25Vc2UsCiAgICAgRmluYWxPYmplY3RVc2UsCkBAIC0xMDgsNiArMTA5LDgg
QEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwogICAgIGNhc2UgQ2Vs
bFVzZToKICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNDZWxsOwor
ICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjQ2VsbCB8IFNwZWNP
dGhlcjsKICAgICBjYXNlIE9iamVjdFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNPYmplY3Q7CiAg
ICAgY2FzZSBGdW5jdGlvblVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw5IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxk
MigpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhIW5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmRmZ1Nob3VsZFdhdGNoKCkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4
LDYgKzQxOCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAg
ICAgICAgICAgICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKICAgICAgICAgICAgICAgICBjYXNl
IENlbGxVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgICAg
ICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKICAgICAgICAgICAgICAgICBjYXNlIE9iamVjdFVz
ZToKICAgICAgICAgICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICAgICAgICAgIGNh
c2UgT2JqZWN0T3JPdGhlclVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAyNiwyMSArMjAyNiw1NyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNr
U3RydWN0dXJlKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgCiAgICAgICAgIEV4aXRLaW5kIGV4aXRLaW5kOwogICAgICAg
ICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGV4aXRL
aW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZXhpdEtp
bmQgPSBCYWRDYWNoZTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1f
b3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIAot
ICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAgICAgICAgIHN0cnVjdHVyZUlELCBqc1ZhbHVl
VmFsdWUoY2VsbCksIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAotICAgICAgICAg
ICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIHJldHVy
biB3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0pOworCisgICAgICAg
IHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxs
VXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNl
bGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAg
ICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAg
WyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
d2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7
CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNl
bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhl
clVzZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90
IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGlu
dWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxD
YXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAg
ICAgIGNoZWNrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUodmFsdWUpLAorICAgICAg
ICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAg
ICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwg
U3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVDaGVja0NlbGwoKQpAQCAtNDAyMiw2ICs0MDU4LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRz
LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisKKyAgICAgICAg
ICAgIGNoZWNrSW5mZXJyZWRUeXBlKG1fbm9kZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJl
cXVpcmVkVHlwZSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7
CiAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxh
Y2UpIHsKQEAgLTU2NzQsNiArNTcxMiwxMzUgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIHJldHVybiBtX291dC5waGko
bV9vdXQuaW50MzIsIHJlc3VsdHMpOwogICAgIH0KKworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5
cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRv
ciYgdHlwZSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVD
SyBvciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEg
bm9kZSBsaWtlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCgu
Li4pCisgICAgICAgIC8vCisgICAgICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAv
LworICAgICAgICAvLyAgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSkgeworICAgICAgICAv
LyAgICAgY2FzZSA0MjoKKyAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4s
IHR5cGUxKTsKKyAgICAgICAgLy8gICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVh
azsKKyAgICAgICAgLy8gICAgIGNhc2UgNDM6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZl
cnJlZFR5cGUoLi4uLCB0eXBlMik7CisgICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8v
ICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8v
IHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3
b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291bGQgYmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkg
dHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0eXBlMSB8IHR5cGUyLgorICAgICAgICAKKyAgICAg
ICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgeworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90
dG9tOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVh
bih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlw
ZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpOdW1iZXI6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2Up
KSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0
cmluZzoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2Rl
KCksIGlzTm90U3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6
CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAg
ICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0
dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJ
RCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1
cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
YXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0lu
ZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgbm90IGNlbGwgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIg
Y29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNl
KSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
Y2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVl
KGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJl
KCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAg
ICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKworICAgICAgICAg
ICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlw
ZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkp
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmpl
Y3RPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsK
KworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworCisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxs
Q2FzZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05v
dE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7CisKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYg
flNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6
VG9wOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7CisgICAgfQogICAgIAogICAg
IExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKICAgICB7CkBAIC03NTE0LDYgKzc2ODEsOSBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIENlbGxVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVD
ZWxsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJV
c2U6CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgICAgIEFTU0VSVCgh
bV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTc1OTQsNiArNzc2NCwyMiBAQCBwcml2YXRlOgogICAgICAgICBsb3dDZWxsKGVkZ2UpOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBub3QgY2VsbCIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVj
dWxhdGUgQ2VsbE9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwg
dW5zdXJlKGlzTm90Q2VsbCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNOb3RDZWxsLCBjb250aW51YXRpb24pOworICAgICAgICBGVExfVFlQRV9D
SEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNO
b3RPdGhlcih2YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAg
IAogICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUludChFZGdlIGVkZ2UpCiAgICAgewogICAgICAg
ICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCkBAIC04MTI3LDYgKzgz
MTMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYg
KGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhbkZhbHNlKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09
IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIAogICAgICAg
ICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCkBAIC04MTM1LDkg
KzgzMjQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVy
LT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwotICAgICAgICAKKwog
ICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3Qo
KTsKIAorICAgICAgICBpZiAoZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuVHJ1ZSkgewor
ICAgICAgICAgICAgZW1pdE9TUkV4aXRDYWxsKGV4aXQsIGxvd1ZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVs
bHB0cjsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDc4IEBAIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKIH0KIAorQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmTm90VHlwZSgKKyAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQ
UiwgY29uc3QgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUYWdSZWdpc3Rl
cnNNb2RlIG1vZGUpCit7CisgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHQ7CisK
KyAgICBzd2l0Y2ggKGRlc2NyaXB0b3Iua2luZCgpKSB7CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
OkJvdHRvbToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChqdW1wKCkpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29sZWFuOgorICAgICAgICByZXN1bHQuYXBwZW5k
KGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aElmTm90T3RoZXIocmVncywgdGVtcEdQUikpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpJbnQzMjoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJlZ3MsIG1vZGUpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6TnVtYmVyOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ3Ms
IHRlbXBHUFIsIG1vZGUpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlw
ZTo6U3RyaW5nOgorICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBt
b2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVncy5wYXls
b2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgcmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
cmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgYnJhbmNo
U3RydWN0dXJlKAorICAgICAgICAgICAgICAgIE5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEFk
ZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogewor
ICAgICAgICBKdW1wIG9rID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOworICAgICAgICByZXN1
bHQuYXBwZW5kKAorICAgICAgICAgICAgYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAg
IE5vdEVxdWFsLAorICAgICAgICAgICAgICAgIEFkZHJlc3MocmVncy5wYXlsb2FkR1BSKCksIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5z
dHJ1Y3R1cmUoKSkpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICByZXN1bHQuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChyZWdzLCBtb2RlKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
YnJhbmNoSWZOb3RPYmplY3QocmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAgICBKdW1wIG9r
ID0gYnJhbmNoSWZPdGhlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChi
cmFuY2hJZk5vdENlbGwocmVncywgbW9kZSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KHJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpUb3A6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpwdXJpZnlOYU4oRlBSUmVnIGZwcikKIHsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub3ROYU4gPSBicmFuY2hEb3VibGUoRG91YmxlRXF1YWwsIGZwciwgZnByKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNp
b24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTU1LDM3ICs1NTUsNDggQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogCi0gICAgSnVtcCBicmFuY2hJZk5vdENlbGwoR1BSUmVnIHJlZykKKyAgICBlbnVtIFRh
Z1JlZ2lzdGVyc01vZGUgeworICAgICAgICBEb05vdEhhdmVUYWdSZWdpc3RlcnMsCisgICAgICAg
IEhhdmVUYWdSZWdpc3RlcnMKKyAgICB9OworCisgICAgSnVtcCBicmFuY2hJZk5vdENlbGwoR1BS
UmVnIHJlZywgVGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAg
ICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAg
IHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCBUcnVzdGVkSW1tNjQoVGFnTWFzaykp
OwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAgICByZXR1cm4gYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgSnVtcCBicmFuY2hJZk5vdENlbGwoSlNW
YWx1ZVJlZ3MgcmVncykKKyAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyByZWdz
LCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKHJlZ3MuZ3ByKCkp
OworICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKHJlZ3MuZ3ByKCksIG1vZGUpOwogI2Vs
c2UKLSAgICAgICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChyZWdzLnRhZ0dQUigpKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaElmTm90Q2VsbChyZWdzLnRhZ0dQUigpLCBtb2RlKTsKICNlbmRpZgog
ICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaElmQ2VsbChHUFJSZWcgcmVnKQorICAgIEp1bXAg
YnJhbmNoSWZDZWxsKEdQUlJlZyByZWcsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdS
ZWdpc3RlcnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBicmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZywgVHJ1c3RlZEltbTY0KFRh
Z01hc2spKTsKICNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVnLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpOwogI2VuZGlmCiAgICAgfQotICAgIEp1bXAgYnJhbmNoSWZDZWxsKEpT
VmFsdWVSZWdzIHJlZ3MpCisgICAgSnVtcCBicmFuY2hJZkNlbGwoSlNWYWx1ZVJlZ3MgcmVncywg
VGFnUmVnaXN0ZXJzTW9kZSBtb2RlID0gSGF2ZVRhZ1JlZ2lzdGVycykKICAgICB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaElmQ2VsbChyZWdzLmdwcigpKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaElmQ2VsbChyZWdzLmdwcigpLCBtb2RlKTsKICNlbHNlCi0gICAg
ICAgIHJldHVybiBicmFuY2hJZkNlbGwocmVncy50YWdHUFIoKSk7CisgICAgICAgIHJldHVybiBi
cmFuY2hJZkNlbGwocmVncy50YWdHUFIoKSwgbW9kZSk7CiAjZW5kaWYKICAgICB9CiAgICAgCkBA
IC02MTMsNDMgKzYyNCw1NSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgSnVt
cCBicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgSnVtcCBicmFuY2hJZkludDMy
KEpTVmFsdWVSZWdzIHJlZ3MsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3Rl
cnMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBicmFuY2g2NChB
Ym92ZU9yRXF1YWwsIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWdz
LmdwcigpLCBUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAgVU5V
U0VEX1BBUkFNKG1vZGUpOwogICAgICAgICByZXR1cm4gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFn
R1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogI2VuZGlmCiAgICAgfQog
ICAgIAotICAgIEp1bXAgYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyByZWdzKQorICAgIEp1
bXAgYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyByZWdzLCBUYWdSZWdpc3RlcnNNb2RlIG1v
ZGUgPSBIYXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICByZXR1cm4gYnJhbmNoNjQoQmVsb3csIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgICAgIGlmIChtb2RlID09IEhhdmVUYWdSZWdpc3RlcnMpCisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3csIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2g2NChCZWxvdywgcmVncy5n
cHIoKSwgVHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpKTsKICNlbHNlCisgICAgICAgIFVOVVNF
RF9QQVJBTShtb2RlKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCByZWdzLnRh
Z0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICNlbmRpZgogICAgIH0K
IAogICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9k
ZS4KLSAgICBKdW1wIGJyYW5jaElmTnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1w
R1BSKQorICAgIEp1bXAgYnJhbmNoSWZOdW1iZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRl
bXBHUFIsIFRhZ1JlZ2lzdGVyc01vZGUgbW9kZSA9IEhhdmVUYWdSZWdpc3RlcnMpCiAgICAgewog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKLSAgICAg
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBpZiAobW9kZSA9PSBIYXZlVGFnUmVnaXN0ZXJz
KQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWdzLmdwcigpLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZ3MuZ3ByKCksIFRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSk7CiAj
ZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obW9kZSk7CiAgICAgICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVncy50YWdHUFIoKSwgdGVtcEdQUik7CiAgICAgICAgIHJldHVybiBicmFuY2gz
MihCZWxvdywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsK
ICNlbmRpZgogICAgIH0KICAgICAKICAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90
IHVzZWQgaW4gNjQtYml0IG1vZGUuCi0gICAgSnVtcCBicmFuY2hJZk5vdE51bWJlcihKU1ZhbHVl
UmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICBKdW1wIGJyYW5jaElmTm90TnVtYmVyKEpT
VmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBUYWdSZWdpc3RlcnNNb2RlIG1vZGUgPSBI
YXZlVGFnUmVnaXN0ZXJzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBVTlVT
RURfUEFSQU0odGVtcEdQUik7Ci0gICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVn
cy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1v
ZGUgPT0gSGF2ZVRhZ1JlZ2lzdGVycykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQo
WmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlcikpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1vZGUpOwogICAgICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3MudGFnR1BSKCksIHRlbXBHUFIpOwogICAgICAg
ICByZXR1cm4gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnICsgMSkpOwogI2VuZGlmCkBAIC03MTksNiArNzQyLDkgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCisgICAgSnVtcExpc3QgYnJhbmNoSWZOb3RUeXBlKAorICAgICAg
ICBKU1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciYsIFRhZ1JlZ2lzdGVyc01vZGUpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAg
ICBKdW1wIGJyYW5jaFN0cnVjdHVyZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgVCBs
ZWZ0SGFuZFNpZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3
OCw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAgICAg
ICAgIHB0cmRpZmZfdCBvZmZzZXRUb1BhdGNoZWRTdG9yYWdlID0gb2Zmc2V0UmVsYXRpdmVUb1Bh
dGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgJiYgTWFj
cm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0VG9QYXRjaGVkU3Rv
cmFnZSkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpIHsKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZl
cnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewogCiAgICAgICAgICAgICAgICAgcmVwYXRjaEJ5
SWRTZWxmQWNjZXNzKAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzMSw2ICs2MzEsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X2J5X2lkCiAgICAgICAgIHBjWzVdLnUucG9pbnRlciA9IG51bGxwdHI7IC8vIG9mZnNldAogICAg
ICAgICBwY1s2XS51LnBvaW50ZXIgPSBudWxscHRyOyAvLyBuZXcgc3RydWN0dXJlCiAgICAgICAg
IHBjWzddLnUucG9pbnRlciA9IG51bGxwdHI7IC8vIHN0cnVjdHVyZSBjaGFpbgorICAgICAgICBw
Y1s4XS51LnB1dEJ5SWRGbGFncyA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxQdXRCeUlkRmxh
Z3M+KHBjWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZFBlcnNpc3RlbnRGbGFnc01hc2spOwog
ICAgICAgICAKICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CkBA
IC02NTgsMTIgKzY2MCwxOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5
X2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNbN10udS5zdHJ1Y3R1cmVDaGFpbi5z
ZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5
SWRGbGFncz4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNbOF0udS5wdXRCeUlkRmxh
Z3MgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+aW5mZXJyZWRUeXBl
RGVzY3JpcHRvckZvcihpZGVudC5pbXBsKCkpLnB1dEJ5SWRGbGFncygpKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlSUQg
PSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5SWRGbGFncyA9
IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUu
cHV0QnlJZEZsYWdzIHwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5
cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE5
MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkxLDE3ICsxMzkxLDkxIEBAIF9sbGludF9v
cF9wdXRfYnlfaWQ6CiAgICAgIyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlOgogICAgICMgdDIgLT4g
Y3VycmVudFN0cnVjdHVyZUlECiAgICAgIyB0MCAtPiBvYmplY3QgYmFzZQorICAgICMgV2Ugd2ls
bCBsb3NlIGN1cnJlbnRTdHJ1Y3R1cmVJRCBpbiB0aGUgc2hlbmFuaWdhbnMgYmVsb3cuCiAKKyAg
ICBsb2FkaSAxMltQQ10sIHQxCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIsIHQz
KQorICAgIGxvYWRpIDMyW1BDXSwgdDEKKworICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToK
KyAgICAjIHQwIC0+IG9iamVjdCBiYXNlCisgICAgIyB0MSAtPiBwdXQgYnkgaWQgZmxhZ3MKKyAg
ICAjIHQyIC0+IHZhbHVlIHRhZworICAgICMgdDMgLT4gdmFsdWUgcGF5bG9hZAorCisgICAgYnRp
bnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2ssIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcgorCisgICAgIyBXZSBoYXZlIG9uZSBvZiB0aGUgbm9uLXN0cnVj
dHVyZSB0eXBlIGNoZWNrcy4gRmluZCBvdXQgd2hpY2ggb25lLgorICAgIGFuZGkgUHV0QnlJZFNl
Y29uZGFyeVR5cGVNYXNrLCB0MQorICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlU3Ry
aW5nLCAub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmcKKworICAgICMgV2UgYXJlIG9u
ZSBvZiB0aGUgZm9sbG93aW5nOiBTdHJpbmcsIE9iamVjdCwgT2JqZWN0T3JPdGhlciwgVG9wCisg
ICAgYmlsdCB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyLCAub3BQdXRCeUlk
VHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyCisKKyAgICAjIFdlIGFyZSBlaXRoZXIgT2Jq
ZWN0T3JPdGhlciBvciBUb3AuCisgICAgYmllcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVUb3As
IC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworCisgICAgIyBDaGVjayBpZiB3ZSBhcmUgT2Jq
ZWN0T3JPdGhlci4KKyAgICBiaWVxIHQyLCBDZWxsVGFnLCAub3BQdXRCeUlkVHlwZUNoZWNrT2Jq
ZWN0Cisub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXI6CisgICAgYmllcSB0MiwgTnVsbFRhZywgLm9w
UHV0QnlJZERvbmVDaGVja2luZ1R5cGVzCisgICAgYmllcSB0MiwgVW5kZWZpbmVkVGFnLCAub3BQ
dXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0
QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JPdGhlcjoKKyAgICAjIFdlIGFyZSBlaXRoZXIg
U3RyaW5nIG9yIE9iamVjdC4KKyAgICBiaW5lcSB0MiwgQ2VsbFRhZywgLm9wUHV0QnlJZFNsb3cK
KyAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU9iamVjdCwgLm9wUHV0QnlJZFR5cGVD
aGVja09iamVjdAorICAgIGJiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BQ
dXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKy5vcFB1dEJ5
SWRUeXBlQ2hlY2tPYmplY3Q6CisgICAgYmJhZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RU
eXBlLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
KworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuU3RyaW5nOgorICAgICMgV2UgYXJlIG9uZSBv
ZiB0aGUgZm9sbG93aW5nOiBCb3R0b20sIEJvb2xlYW4sIE90aGVyLCBJbnQzMiwgTnVtYmVyLgor
ICAgIGJpbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlSW50MzIsIC5vcFB1dEJ5SWRUeXBlQ2hl
Y2tMZXNzVGhhbkludDMyCisKKyAgICAjIFdlIGFyZSBlaXRoZXIgSW50MzIgb3IgTnVtYmVyLgor
ICAgIGJpZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTnVtYmVyLCAub3BQdXRCeUlkVHlwZUNo
ZWNrTnVtYmVyCisKKyAgICBiaWVxIHQyLCBJbnQzMlRhZywgLm9wUHV0QnlJZERvbmVDaGVja2lu
Z1R5cGVzCisgICAgam1wIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWRUeXBlQ2hlY2tOdW1i
ZXI6CisgICAgYmliIHQyLCBMb3dlc3RUYWcgKyAxLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlw
ZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFu
SW50MzI6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVh
biwgT3RoZXIKKyAgICBiaW5lcSB0MSwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuLCAub3BQ
dXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcgorICAgIGJpZXEgdDIsIEJvb2xlYW5UYWcsIC5v
cFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQ
dXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhlcjoKKyAgICBiaWVxIHQxLCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJ
ZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgor
ICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcFB1dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0
dXJlCisgICAgYnRpbnogdDEsIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cK
KworLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgYW5kaSBQdXRC
eUlkU2Vjb25kYXJ5VHlwZU1hc2ssIHQxCisgICAgYmluZXEgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1
cmVJRFt0M10sIC5vcFB1dEJ5SWRTbG93CisKKy5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlczoK
ICAgICBsb2FkaSAyNFtQQ10sIHQxCiAKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNp
dGlvbgogCi0gICAgIyBUaGlzIGlzIHRoZSB0cmFuc2l0aW9uIGNhc2UuIHQxIGhvbGRzIHRoZSBu
ZXcgU3RydWN0dXJlKi4gdDIgaG9sZHMgdGhlIG9sZCBTdHJ1Y3R1cmUqLgotICAgICMgSWYgd2Ug
aGF2ZSBhIGNoYWluLCB3ZSBuZWVkIHRvIGNoZWNrIGl0LiB0MCBpcyB0aGUgYmFzZS4gV2UgbWF5
IGNsb2JiZXIgdDEgdG8gdXNlIGl0IGFzCi0gICAgIyBzY3JhdGNoLgorICAgICMgVGhpcyBpcyB0
aGUgdHJhbnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0aGUgbmV3IFN0cnVjdHVyZSouIElmIHdlIGhh
dmUgYSBjaGFpbiwgd2UgbmVlZCB0bworICAgICMgY2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBX
ZSBtYXkgY2xvYmJlciB0MSB0byB1c2UgaXQgYXMgc2NyYXRjaC4KICAgICBsb2FkcCAyOFtQQ10s
IHQzCiAgICAgYnRweiB0MywgLm9wUHV0QnlJZFRyYW5zaXRpb25EaXJlY3QKIAorICAgIGxvYWRp
IDE2W1BDXSwgdDIgIyBOZWVkIG9sZCBzdHJ1Y3R1cmUgYWdhaW4uCiAgICAgbG9hZHAgU3RydWN0
dXJlQ2hhaW46Om1fdmVjdG9yW3QzXSwgdDMKICAgICBhc3NlcnQobWFjcm8gKG9rKSBidHBueiB0
Mywgb2sgZW5kKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTEyNjYsMTQgKzEyNjYsODggQEAgX2xsaW50X29wX3B1dF9ieV9pZDoKICAgICB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHQzLCB0MCwgLm9wUHV0QnlJZFNs
b3cpCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDIKLSAgICBsb2FkaXNG
cm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCi0gICAgYmluZXEgdDIsIHQxLCAub3BQdXRCeUlkU2xvdwor
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MikKKyAgICBiaW5lcSB0MiwgSlNDZWxsOjpt
X3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwg
d2UgaGF2ZToKLSAgICAjIHQxLCB0MiAtPiBjdXJyZW50IHN0cnVjdHVyZSBJRAorICAgICMgdDIg
LT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+IG9iamVjdCBiYXNlCiAKKyAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MSwgdDMpCisKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig4LCB0MSkKKworICAgICMgQXQgdGhp
cyBwb2ludCwgd2UgaGF2ZToKKyAgICAjIHQwIC0+IG9iamVjdCBiYXNlCisgICAgIyB0MSAtPiBw
dXQgYnkgaWQgZmxhZ3MKKyAgICAjIHQyIC0+IGN1cnJlbnQgc3RydWN0dXJlIElECisgICAgIyB0
MyAtPiB2YWx1ZSB0byBwdXQKKworICAgIGJ0cG56IHQxLCBQdXRCeUlkUHJpbWFyeVR5cGVNYXNr
LCAub3BQdXRCeUlkVHlwZUNoZWNrT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIKKworICAgICMg
V2UgaGF2ZSBvbmUgb2YgdGhlIG5vbi1zdHJ1Y3R1cmUgdHlwZSBjaGVja3MuIEZpbmQgb3V0IHdo
aWNoIG9uZS4KKyAgICBhbmRwIFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzaywgdDEKKyAgICBicGx0
IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZywgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NU
aGFuU3RyaW5nCisKKyAgICAjIFdlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogU3RyaW5nLCBP
YmplY3QsIE9iamVjdE9yT3RoZXIsIFRvcAorICAgIGJwbHQgdDEsIFB1dEJ5SWRTZWNvbmRhcnlU
eXBlT2JqZWN0T3JPdGhlciwgLm9wUHV0QnlJZFR5cGVDaGVja0xlc3NUaGFuT2JqZWN0T3JPdGhl
cgorCisgICAgIyBXZSBhcmUgZWl0aGVyIE9iamVjdE9yT3RoZXIgb3IgVG9wLgorICAgIGJwZXEg
dDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wLCAub3BQdXRCeUlkRG9uZUNoZWNraW5nVHlwZXMK
KworICAgICMgQ2hlY2sgaWYgd2UgYXJlIE9iamVjdE9yT3RoZXIuCisgICAgYnRxeiB0MywgdGFn
TWFzaywgLm9wUHV0QnlJZFR5cGVDaGVja09iamVjdAorLm9wUHV0QnlJZFR5cGVDaGVja090aGVy
OgorICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDMKKyAgICBicWVxIHQzLCBWYWx1ZU51bGws
IC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisu
b3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5PYmplY3RPck90aGVyOgorICAgICMgV2UgYXJlIGVp
dGhlciBTdHJpbmcgb3IgT2JqZWN0LgorICAgIGJ0cW56IHQzLCB0YWdNYXNrLCAub3BQdXRCeUlk
U2xvdworICAgIGJwZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0LCAub3BQdXRCeUlk
VHlwZUNoZWNrT2JqZWN0CisgICAgYmJlcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUs
IC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworLm9w
UHV0QnlJZFR5cGVDaGVja09iamVjdDoKKyAgICBiYmFlcSBKU0NlbGw6Om1fdHlwZVt0M10sIE9i
amVjdFR5cGUsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlk
U2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrTGVzc1RoYW5TdHJpbmc6CisgICAgIyBXZSBhcmUg
b25lIG9mIHRoZSBmb2xsb3dpbmc6IEJvdHRvbSwgQm9vbGVhbiwgT3RoZXIsIEludDMyLCBOdW1i
ZXIKKyAgICBicGx0IHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyLCAub3BQdXRCeUlkVHlw
ZUNoZWNrTGVzc1RoYW5JbnQzMgorCisgICAgIyBXZSBhcmUgZWl0aGVyIEludDMyIG9yIE51bWJl
ci4KKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU51bWJlciwgLm9wUHV0QnlJZFR5
cGVDaGVja051bWJlcgorCisgICAgYnFhZXEgdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5SWRE
b25lQ2hlY2tpbmdUeXBlcworICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlw
ZUNoZWNrTnVtYmVyOgorICAgIGJ0cW56IHQzLCB0YWdUeXBlTnVtYmVyLCAub3BQdXRCeUlkRG9u
ZUNoZWNraW5nVHlwZXMKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVD
aGVja0xlc3NUaGFuSW50MzI6CisgICAgIyBXZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IEJv
dHRvbSwgQm9vbGVhbiwgT3RoZXIuCisgICAgYnBuZXEgdDEsIFB1dEJ5SWRTZWNvbmRhcnlUeXBl
Qm9vbGVhbiwgLm9wUHV0QnlJZFR5cGVDaGVja0JvdHRvbU9yT3RoZXIKKyAgICB4b3JxIFZhbHVl
RmFsc2UsIHQzCisgICAgYnRxeiB0MywgfjEsIC5vcFB1dEJ5SWREb25lQ2hlY2tpbmdUeXBlcwor
ICAgIGptcCAub3BQdXRCeUlkU2xvdworCisub3BQdXRCeUlkVHlwZUNoZWNrQm90dG9tT3JPdGhl
cjoKKyAgICBicGVxIHQxLCBQdXRCeUlkU2Vjb25kYXJ5VHlwZU90aGVyLCAub3BQdXRCeUlkVHlw
ZUNoZWNrT3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVj
a09iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgIGJ0cXogdDMsIHRhZ01hc2ssIC5vcFB1
dEJ5SWRUeXBlQ2hlY2tPYmplY3RXaXRoU3RydWN0dXJlCisgICAgYnRwbnogdDEsIFB1dEJ5SWRQ
cmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyLCAub3BQdXRCeUlkVHlwZUNoZWNr
T3RoZXIKKyAgICBqbXAgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZFR5cGVDaGVja09iamVj
dFdpdGhTdHJ1Y3R1cmU6CisgICAgdXJzaGlmdHAgMywgdDEKKyAgICBiaW5lcSB0MSwgSlNDZWxs
OjptX3N0cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKKworLm9wUHV0QnlJZERvbmVDaGVj
a2luZ1R5cGVzOgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICAKICAgICBi
dGl6IHQxLCAub3BQdXRCeUlkTm90VHJhbnNpdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTkw
MDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDIyIEBAIGVsc2UKICAgICBjb25zdCBM
b3dlc3RUYWcgPSBEZWxldGVkVmFsdWVUYWcKIGVuZAogCisjIE5PVEU6IFRoZSB2YWx1ZXMgYmVs
b3cgbXVzdCBiZSBpbiBzeW5jIHdpdGggd2hhdCBpcyBpbiBQdXRCeUlkRmxhZ3MuaC4KK2NvbnN0
IFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPSAweDYKK2NvbnN0IFB1dEJ5SWRQcmltYXJ5VHlwZVNl
Y29uZGFyeSA9IDB4MAorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVy
ZSA9IDB4MgorY29uc3QgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3Ro
ZXIgPSAweDQKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlTWFzayA9IC0weDgKK2NvbnN0IFB1
dEJ5SWRTZWNvbmRhcnlUeXBlQm90dG9tID0gMHgwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZUJvb2xlYW4gPSAweDgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT3RoZXIgPSAweDEwCitj
b25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZUludDMyID0gMHgxOAorY29uc3QgUHV0QnlJZFNlY29u
ZGFyeVR5cGVOdW1iZXIgPSAweDIwCitjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZyA9
IDB4MjgKK2NvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMAorY29uc3QgUHV0
QnlJZFNlY29uZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOAorY29uc3QgUHV0QnlJZFNlY29u
ZGFyeVR5cGVUb3AgPSAweDQwCisKIGNvbnN0IENhbGxPcENvZGVTaXplID0gOQogCiBpZiBYODZf
NjQgb3IgQVJNNjQgb3IgQ19MT09QCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9u
S2luZC5oIgogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiREZHUGxh
bi5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8u
aCIKICNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGUuaCIKKwor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIEluZmVycmVkVHlwZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7Citw
dWJsaWM6CisgICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCgKKyAgICAgICAgSW5mZXJyZWRUeXBl
KiBpbmZlcnJlZFR5cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCisgICAgICAgIGNvbnN0IElu
ZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvciwgY29uc3QgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yJiBuZXdEZXNjcmlwdG9yLAorICAgICAgICBKU1ZhbHVlIG9mZmVuZGluZ1Zh
bHVlKQorICAgICAgICA6IG1faW5mZXJyZWRUeXBlKGluZmVycmVkVHlwZSkKKyAgICAgICAgLCBt
X3VpZCh1aWQpCisgICAgICAgICwgbV9vbGREZXNjcmlwdG9yKG9sZERlc2NyaXB0b3IpCisgICAg
ICAgICwgbV9uZXdEZXNjcmlwdG9yKG5ld0Rlc2NyaXB0b3IpCisgICAgICAgICwgbV9vZmZlbmRp
bmdWYWx1ZShvZmZlbmRpbmdWYWx1ZSkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBvdXQucHJpbnQoCisgICAgICAgICAgICAiSW5mZXJyZWQgdHlwZSBjaGFuZ2VkIG9uICIsIFJh
d1BvaW50ZXIobV9pbmZlcnJlZFR5cGUpLCAiIGZvciBwcm9wZXJ0eSAiLCBtX3VpZCwgIjogIgor
ICAgICAgICAgICAgIm9sZCB0eXBlIHdhcyAiLCBtX29sZERlc2NyaXB0b3IsICIgd2hpbGUgZGVz
aXJlZCB0eXBlIGlzICIsIG1fbmV3RGVzY3JpcHRvcik7CisgICAgICAgIGlmIChtX29mZmVuZGlu
Z1ZhbHVlKQorICAgICAgICAgICAgb3V0LnByaW50KCIgZHVlIHRvICIsIG1fb2ZmZW5kaW5nVmFs
dWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUqIG1faW5mZXJyZWRUeXBl
OworICAgIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4gbV91aWQ7CisgICAgSW5mZXJyZWRUeXBl
OjpEZXNjcmlwdG9yIG1fb2xkRGVzY3JpcHRvcjsKKyAgICBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0
b3IgbV9uZXdEZXNjcmlwdG9yOworICAgIEpTVmFsdWUgbV9vZmZlbmRpbmdWYWx1ZTsKK307CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBl
OjpzX2luZm8gPSB7ICJJbmZlcnJlZFR5cGUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKElu
ZmVycmVkVHlwZSkgfTsKKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGU6OmNyZWF0ZShWTSYg
dm0pCit7CisgICAgSW5mZXJyZWRUeXBlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxJbmZlcnJlZFR5cGU+KHZtLmhlYXApKSBJbmZlcnJlZFR5cGUodm0pOworICAgIHJlc3Vs
dC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5m
ZXJyZWRUeXBlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGUqIGlu
ZmVycmVkVHlwZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworICAgIGluZmVy
cmVkVHlwZS0+SW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCk7Cit9CisKK1N0cnVjdHVyZSog
SW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVk
VHlwZSogaW5mZXJyZWRUeXBlID0ganNDYXN0PEluZmVycmVkVHlwZSo+KGNlbGwpOworCisgICAg
aWYgKGluZmVycmVkVHlwZS0+bV9zdHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25k
aXRpb25hbEZpbmFsaXplcigmaW5mZXJyZWRUeXBlLT5tX3N0cnVjdHVyZS0+bV9maW5hbGl6ZXIp
OworfQorCitJbmZlcnJlZFR5cGU6OktpbmQgSW5mZXJyZWRUeXBlOjpraW5kRm9yRmxhZ3MoUHV0
QnlJZEZsYWdzIGZsYWdzKQoreworICAgIHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkUHJpbWFyeVR5
cGVNYXNrKSB7CisgICAgY2FzZSBQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnk6CisgICAgICAg
IHN3aXRjaCAoZmxhZ3MgJiBQdXRCeUlkU2Vjb25kYXJ5VHlwZU1hc2spIHsKKyAgICAgICAgY2Fz
ZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZUJvdHRvbToKKyAgICAgICAgICAgIHJldHVybiBCb3R0b207
CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVCb29sZWFuOgorICAgICAgICAgICAg
cmV0dXJuIEJvb2xlYW47CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPdGhlcjoK
KyAgICAgICAgICAgIHJldHVybiBPdGhlcjsKKyAgICAgICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5
VHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIEludDMyOworICAgICAgICBjYXNlIFB1dEJ5
SWRTZWNvbmRhcnlUeXBlTnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICAg
ICAgY2FzZSBQdXRCeUlkU2Vjb25kYXJ5VHlwZVN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmc7CisgICAgICAgIGNhc2UgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3Q6CisgICAgICAg
ICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICBjYXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2Jq
ZWN0T3JPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RPck90aGVyOworICAgICAgICBj
YXNlIFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wOgorICAgICAgICAgICAgcmV0dXJuIFRvcDsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gQm90dG9tOworICAgICAgICB9CisgICAgY2FzZSBQdXRCeUlk
UHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0dXJlOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0
aFN0cnVjdHVyZTsKKyAgICBjYXNlIFB1dEJ5SWRQcmltYXJ5VHlwZU9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyOgorICAgICAgICByZXR1cm4gT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIEJvdHRvbTsKKyAgICB9Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJ
bmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I6OmZvclZhbHVlKEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gQm9vbGVhbjsKKyAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIE90aGVyOworICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICBpZiAodmFsdWUuaXNDZWxs
KCkpIHsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlm
IChjZWxsLT5pc1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICAgICAg
aWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRGVzY3JpcHRvcihPYmplY3RXaXRoU3RydWN0dXJlLCBjZWxsLT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICByZXR1cm4gT2JqZWN0OworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBUb3A7Cit9CisKK0luZmVycmVkVHlwZTo6RGVzY3JpcHRvciBJbmZlcnJlZFR5cGU6OkRl
c2NyaXB0b3I6OmZvckZsYWdzKFZNJiB2bSwgUHV0QnlJZEZsYWdzIGZsYWdzKQoreworICAgIEtp
bmQga2luZCA9IGtpbmRGb3JGbGFncyhmbGFncyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7
CisgICAgaWYgKGhhc1N0cnVjdHVyZShraW5kKSkKKyAgICAgICAgc3RydWN0dXJlID0gdm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGRlY29kZVN0cnVjdHVyZUlEKGZsYWdzKSk7CisgICAg
ZWxzZQorICAgICAgICBzdHJ1Y3R1cmUgPSBudWxscHRyOworICAgIHJldHVybiBEZXNjcmlwdG9y
KGtpbmQsIHN0cnVjdHVyZSk7Cit9CisKK1B1dEJ5SWRGbGFncyBJbmZlcnJlZFR5cGU6OkRlc2Ny
aXB0b3I6OnB1dEJ5SWRGbGFncygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICBjYXNlIEJvdHRvbToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4o
UHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVCb3R0b20p
OworICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5SWRG
bGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNlY29uZGFyeVR5cGVC
b29sZWFuKTsKKyAgICBjYXNlIE90aGVyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHV0
QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25kYXJ5
VHlwZU90aGVyKTsKKyAgICBjYXNlIEludDMyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZUludDMyKTsKKyAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFB1dEJ5SWRGbGFncz4oUHV0QnlJZFByaW1hcnlUeXBlU2Vjb25kYXJ5IHwgUHV0QnlJZFNl
Y29uZGFyeVR5cGVOdW1iZXIpOworICAgIGNhc2UgU3RyaW5nOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UHV0QnlJZEZsYWdzPihQdXRCeUlkUHJpbWFyeVR5cGVTZWNvbmRhcnkgfCBQdXRC
eUlkU2Vjb25kYXJ5VHlwZVN0cmluZyk7CisgICAgY2FzZSBPYmplY3Q6CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlwZVNlY29uZGFyeSB8
IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0KTsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXI6Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQcmltYXJ5VHlw
ZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JPdGhlcik7CisgICAgY2Fz
ZSBUb3A6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KFB1dEJ5SWRQ
cmltYXJ5VHlwZVNlY29uZGFyeSB8IFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wKTsKKyAgICBjYXNl
IE9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQdXRCeUlk
RmxhZ3M+KAorICAgICAgICAgICAgUHV0QnlJZFByaW1hcnlUeXBlT2JqZWN0V2l0aFN0cnVjdHVy
ZSB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKSk7CisgICAgY2FzZSBPYmpl
Y3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFB1dEJ5
SWRGbGFncz4oCisgICAgICAgICAgICBQdXRCeUlkUHJpbWFyeVR5cGVPYmplY3RXaXRoU3RydWN0
dXJlT3JPdGhlciB8IGVuY29kZVN0cnVjdHVyZUlEKG1fc3RydWN0dXJlLT5pZCgpKSk7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFB1dEJ5SWRO
b25lOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6bWVyZ2UoY29uc3QgRGVz
Y3JpcHRvciYgb3RoZXIpCit7CisgICAgLy8gRmlsdGVyIG91dCBjb21tb24gdGhpbmdzIHRvIHNp
bXBsaWZ5IHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlbG93LgorICAgIGlmICgqdGhpcyA9PSBvdGhl
cikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvdGhlci5tX2tpbmQgPT0gQm90dG9tKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQm90dG9tOgor
ICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFu
OgorICAgIGNhc2UgU3RyaW5nOgorICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgT3RoZXI6CisgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAg
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3Ry
dWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgICp0aGlzID0gRGVzY3JpcHRvcihPYmplY3RXaXRo
U3RydWN0dXJlT3JPdGhlciwgb3RoZXIuc3RydWN0dXJlKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAg
ICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICBjYXNlIEludDMyOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1f
a2luZCkgeworICAgICAgICBjYXNlIE51bWJlcjoKKyAgICAgICAgICAgICp0aGlzID0gTnVtYmVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRo
aXMgPSBUb3A7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE51bWJl
cjoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlz
ID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBj
YXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6IC8vIElmIHdlIHNlZSB0aGlzIGhlcmUsIHRoZW4gd2Ug
a25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KKyAgICAgICAgY2FzZSBPYmpl
Y3Q6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgIGlmICht
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICp0aGlz
ID0gb3RoZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgT3RoZXI6CisgICAgICAgICAgICBt
X2tpbmQgPSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjoK
KyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRo
U3RydWN0dXJlOgorICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0
dXJlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICp0aGlzID0gT2JqZWN0
T3JPdGhlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAg
ICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IC8vIElmIHdlIHNlZSB0aGlzIGhl
cmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGRpZG4ndCBtYXRjaC4KKyAgICAg
ICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgKnRoaXMgPSBPYmplY3RPck90aGVy
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE90aGVyOgorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKnRoaXMgPSBUb3A7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIE9iamVjdDoKKyAgICAgICAgc3dp
dGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90
aGVyOgorICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXI6CisgICAgICAgIGNhc2UgT3RoZXI6Cisg
ICAgICAgICAgICAqdGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqdGhpcyA9IFRvcDsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIGNhc2UgT2JqZWN0T3JPdGhlcjoKKyAgICAgICAgc3dpdGNo
IChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBPYmplY3RXaXRoU3RydWN0dXJlOgorICAg
ICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBjYXNlIE9iamVj
dDoKKyAgICAgICAgY2FzZSBPdGhlcjoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICp0aGlzID0gVG9wOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgY2FzZSBUb3A6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvcjo6cmVtb3ZlU3RydWN0dXJlKCkKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNh
c2UgT2JqZWN0V2l0aFN0cnVjdHVyZToKKyAgICAgICAgKnRoaXMgPSBPYmplY3Q7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICAq
dGhpcyA9IE9iamVjdE9yT3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6
c3Vic3VtZXMoY29uc3QgRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgRGVzY3JpcHRv
ciBtZXJnZWQgPSAqdGhpczsKKyAgICBtZXJnZWQubWVyZ2Uob3RoZXIpOworICAgIHJldHVybiAq
dGhpcyA9PSBtZXJnZWQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yOjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAor
eworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAg
b3V0LnByaW50KCI6IiwgaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKK30KKworSW5mZXJyZWRUeXBl
OjpJbmZlcnJlZFR5cGUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRUeXBlU3Ry
dWN0dXJlLmdldCgpKQorICAgICwgbV93YXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkKK3sK
K30KKworSW5mZXJyZWRUeXBlOjp+SW5mZXJyZWRUeXBlKCkKK3sKK30KKworYm9vbCBJbmZlcnJl
ZFR5cGU6OmNhbldhdGNoKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgY29uc3Qg
RGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVkLmtpbmQoKSA9PSBUb3Ap
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRvcihsb2Nr
ZXIpID09IGV4cGVjdGVkOworfQorCitib29sIEluZmVycmVkVHlwZTo6Y2FuV2F0Y2goY29uc3Qg
RGVzY3JpcHRvciYgZXhwZWN0ZWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICByZXR1cm4gY2FuV2F0Y2gobG9ja2VyLCBleHBlY3RlZCk7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjphZGRXYXRjaHBvaW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
IGxvY2tlciwgV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChk
ZXNjcmlwdG9yKGxvY2tlcikua2luZCgpICE9IFRvcCk7CisKKyAgICBtX3dhdGNocG9pbnRTZXQu
YWRkKHdhdGNocG9pbnQpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6YWRkV2F0Y2hwb2ludChX
YXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgYWRkV2F0Y2hwb2ludChsb2NrZXIsIHdhdGNocG9pbnQpOworfQorCit2
b2lkIEluZmVycmVkVHlwZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChSYXdQb2ludGVyKHRoaXMpLCAiOiIsIGRlc2NyaXB0b3IoKSk7Cit9CisKK2Jvb2wg
SW5mZXJyZWRUeXBlOjp3aWxsU3RvcmVWYWx1ZVNsb3coVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgRGVzY3JpcHRvciBteVR5cGUgPSBkZXNjcmlwdG9yKGxvY2tlcik7
CisgICAgRGVzY3JpcHRvciBvdGhlclR5cGUgPSBEZXNjcmlwdG9yOjpmb3JWYWx1ZSh2YWx1ZSk7
CisKKyAgICBteVR5cGUubWVyZ2Uob3RoZXJUeXBlKTsKKworICAgIEFTU0VSVChkZXNjcmlwdG9y
KGxvY2tlcikgIT0gbXlUeXBlKTsgLy8gVGhlIHR5cGUgbXVzdCBoYXZlIGNoYW5nZWQgaWYgd2Un
cmUgb24gdGhlIHNsb3cgcGF0aC4KKworICAgIHNldChsb2NrZXIsIHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBteVR5cGUpOworCisgICAgcmV0dXJuIGtpbmQobG9ja2VyKSAhPSBUb3A7Cit9CisK
K3ZvaWQgSW5mZXJyZWRUeXBlOjptYWtlVG9wU2xvdyhWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICBzZXQobG9ja2VyLCB2bSwgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKCksIFRvcCk7Cit9CisKK3Zv
aWQgSW5mZXJyZWRUeXBlOjpzZXQoCisgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9j
a2VyLCBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgb2ZmZW5kaW5n
VmFsdWUsCisgICAgRGVzY3JpcHRvciBuZXdEZXNjcmlwdG9yKQoreworICAgIC8vIFdlIHdpbGwg
dHJpZ2dlciB3cml0ZSBiYXJyaWVycyB3aGlsZSBob2xkaW5nIG91ciBsb2NrLiBDdXJyZW50bHks
IHdyaXRlIGJhcnJpZXJzIGRvbid0IEdDLCBidXQgdGhhdAorICAgIC8vIGNvdWxkIGNoYW5nZS4g
SWYgaXQgZG9lcywgd2UgZG9uJ3Qgd2FudCB0byBkZWFkbG9jay4gTm90ZSB0aGF0IHdlIGNvdWxk
IGhhdmUgdXNlZAorICAgIC8vIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgaW4gdGhlIGNhbGxl
ciwgYnV0IHRoZSBjYWxsZXIgaXMgb24gYSBmYXN0IHBhdGggc28gbWF5YmUgdGhhdCB3b3VsZG4n
dCBiZQorICAgIC8vIGEgZ29vZCBpZGVhLgorICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2
bS5oZWFwKTsKKyAgICAKKyAgICAvLyBCZSBkZWZlbnNpdmU6IGlmIHdlJ3JlIG5vdCByZWFsbHkg
Y2hhbmdpbmcgdGhlIHR5cGUsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAg
ICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpID09IG5ld0Rlc2NyaXB0b3IpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoZSBuZXcgZGVzY3JpcHRvciBtdXN0IGJlIG1vcmUgZ2VuZXJhbCB0aGFu
IHRoZSBwcmV2aW91cyBvbmUuCisgICAgQVNTRVJUKG5ld0Rlc2NyaXB0b3Iuc3Vic3VtZXMoZGVz
Y3JpcHRvcihsb2NrZXIpKSk7CisKKyAgICAvLyBJZiB0aGUgbmV3IGRlc2NyaXB0b3JzIGhhdmUg
ZGlmZmVyZW50IHN0cnVjdHVyZXMsIHRoZW4gaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBvbmUgaXMg
bnVsbC4KKyAgICBpZiAoZGVzY3JpcHRvcihsb2NrZXIpLnN0cnVjdHVyZSgpICE9IG5ld0Rlc2Ny
aXB0b3Iuc3RydWN0dXJlKCkpCisgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvcihsb2NrZXIpLnN0
cnVjdHVyZSgpIHx8ICFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKworICAgIC8vIFdlIGFy
ZSBjaGFuZ2luZyB0aGUgdHlwZSwgc28gbWFrZSBzdXJlIHRoYXQgaWYgYW55b25lIHdhcyB3YXRj
aGluZywgdGhleSBmaW5kIG91dCBhYm91dCBpdCBub3cuIElmCisgICAgLy8gYW55b25lIGlzIHdh
dGNoaW5nLCB3ZSBtYWtlIHN1cmUgdG8gZ28gdG8gVG9wIHNvIHRoYXQgd2UgZG9uJ3QgZG8gdGhp
cyBzb3J0IG9mIHRoaW5nIGFnYWluLgorICAgIGlmIChtX3dhdGNocG9pbnRTZXQuc3RhdGUoKSAh
PSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gV2UgY2Fubm90IGhhdmUgYmVlbiBpbnZh
bGlkYXRlZCwgc2luY2UgaWYgd2Ugd2VyZSwgdGhlbiB3ZSdkIGFscmVhZHkgYmUgYXQgVG9wLgor
ICAgICAgICBBU1NFUlQobV93YXRjaHBvaW50U2V0LnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7
CisKKyAgICAgICAgSW5mZXJyZWRUeXBlRmlyZURldGFpbCBkZXRhaWwoCisgICAgICAgICAgICB0
aGlzLCBwcm9wZXJ0eU5hbWUudWlkKCksIGRlc2NyaXB0b3IobG9ja2VyKSwgbmV3RGVzY3JpcHRv
ciwgb2ZmZW5kaW5nVmFsdWUpOworICAgICAgICAKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8g
ZG8gZXhwZW5zaXZlIHRoaW5ncyBiZWNhdXNlIHNvbWUgY29tcGlsZXIgdGhyZWFkIGRlY2lkZWQg
dG8gd2F0Y2ggdGhpcyB0eXBlIGFuZAorICAgICAgICAvLyB0aGVuIHRoZSB0eXBlIGNoYW5nZWQu
IEFzc3VtZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgY3JhenksIGFuZCBkb24ndCBldmVyIGRvIGFu
eSBtb3JlIHRoaW5ncyBmb3IKKyAgICAgICAgLy8gaXQuCisgICAgICAgIG5ld0Rlc2NyaXB0b3Ig
PSBUb3A7CisKKyAgICAgICAgbV93YXRjaHBvaW50U2V0LmZpcmVBbGwoZGV0YWlsKTsKKyAgICB9
CisKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBJbmZlcnJlZFN0cnVjdHVyZSBvYmplY3QgaWYgd2Ug
bm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgaWYgKCFuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpKQor
ICAgICAgICBtX3N0cnVjdHVyZSA9IG51bGxwdHI7CisKKyAgICAvLyBBZGQgYSBuZXcgSW5mZXJy
ZWRTdHJ1Y3R1cmUgb2JqZWN0IGlmIHdlIG5lZWQgb25lIG5vdy4KKyAgICBpZiAobmV3RGVzY3Jp
cHRvci5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBhZ3JlZSBvbiB0aGUgc3RydWN0dXJlcyBpZiB3ZSBnZXQgaGVyZS4K
KyAgICAgICAgICAgIEFTU0VSVChuZXdEZXNjcmlwdG9yLnN0cnVjdHVyZSgpID09IG1fc3RydWN0
dXJlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8SW5mZXJyZWRTdHJ1Y3R1cmU+KHZtLCB0aGlzLCBuZXdE
ZXNjcmlwdG9yLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0Rlc2NyaXB0b3Iuc3RydWN0
dXJlKCktPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KCZtX3N0cnVjdHVyZS0+bV93YXRjaHBvaW50
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmFsbHksIHNldCB0aGUgZGVzY3JpcHRv
ciBraW5kLgorICAgIG1fa2luZCA9IG5ld0Rlc2NyaXB0b3Iua2luZCgpOworCisgICAgLy8gQXNz
ZXJ0IHRoYXQgd2UgZGlkIHRoaW5ncy4KKyAgICBBU1NFUlQoZGVzY3JpcHRvcihsb2NrZXIpID09
IG5ld0Rlc2NyaXB0b3IpOworfQorCit2b2lkIEluZmVycmVkVHlwZTo6cmVtb3ZlU3RydWN0dXJl
KCkKK3sKKyAgICAvLyBGSVhNRTogRmluZCBhbiBlbGVnYW50IGFuZCBjaGVhcCB3YXkgdG8gdGhy
ZWFkIGluZm9ybWF0aW9uIGFib3V0IHdoeSB3ZSBnb3QgaGVyZSBpbnRvIHRoZSBmaXJlCisgICAg
Ly8gZGV0YWlsIGluIHNldCgpLgorICAgIAorICAgIFZNJiB2bSA9ICpIZWFwOjpoZWFwKHRoaXMp
LT52bSgpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAK
KyAgICBEZXNjcmlwdG9yIG5ld0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yKGxvY2tlcik7CisgICAg
bmV3RGVzY3JpcHRvci5yZW1vdmVTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBzZXQobG9ja2VyLCB2
bSwgUHJvcGVydHlOYW1lKG51bGxwdHIpLCBKU1ZhbHVlKCksIG5ld0Rlc2NyaXB0b3IpOworfQor
Cit2b2lkIEluZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50OjpmaXJlSW50
ZXJuYWwoY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgSW5mZXJyZWRTdHJ1Y3R1cmUqIGluZmVy
cmVkU3RydWN0dXJlID0KKyAgICAgICAgYml0d2lzZV9jYXN0PEluZmVycmVkU3RydWN0dXJlKj4o
CisgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpIC0gT0JKRUNUX09GRlNFVE9G
KEluZmVycmVkU3RydWN0dXJlLCBtX3dhdGNocG9pbnQpKTsKKworICAgIGluZmVycmVkU3RydWN0
dXJlLT5tX3BhcmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRUeXBl
OjpJbmZlcnJlZFN0cnVjdHVyZUZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQor
eworICAgIEluZmVycmVkU3RydWN0dXJlKiBpbmZlcnJlZFN0cnVjdHVyZSA9CisgICAgICAgIGJp
dHdpc2VfY2FzdDxJbmZlcnJlZFN0cnVjdHVyZSo+KAorICAgICAgICAgICAgYml0d2lzZV9jYXN0
PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihJbmZlcnJlZFN0cnVjdHVyZSwgbV9maW5h
bGl6ZXIpKTsKKworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChpbmZlcnJlZFN0cnVjdHVyZS0+
bV9wYXJlbnQpKTsKKyAgICAKKyAgICBpZiAoIUhlYXA6OmlzTWFya2VkKGluZmVycmVkU3RydWN0
dXJlLT5tX3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIGluZmVycmVkU3RydWN0dXJlLT5tX3Bh
cmVudC0+cmVtb3ZlU3RydWN0dXJlKCk7Cit9CisKK0luZmVycmVkVHlwZTo6SW5mZXJyZWRTdHJ1
Y3R1cmU6OkluZmVycmVkU3RydWN0dXJlKFZNJiB2bSwgSW5mZXJyZWRUeXBlKiBwYXJlbnQsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICwgbV9zdHJ1
Y3R1cmUodm0sIHBhcmVudCwgc3RydWN0dXJlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBJbmZlcnJlZFR5cGU6OktpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAg
ICBvdXQucHJpbnQoIkJvdHRvbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OkJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgorICAgICAgICBvdXQucHJpbnQo
Ik90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6
CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW5mZXJyZWRUeXBlOjpOdW1iZXI6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgorICAgICAgICBvdXQu
cHJpbnQoIlN0cmluZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0V2l0aFN0cnVj
dHVyZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdp
dGhTdHJ1Y3R1cmVPck90aGVyOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdFdpdGhTdHJ1Y3R1
cmVPck90aGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZmVycmVkVHlwZTo6T2Jq
ZWN0OgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdE9yT3RoZXI6CisgICAgICAgIG91dC5wcmludCgiT2Jq
ZWN0T3JPdGhlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlRv
cDoKKyAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVk
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRUeXBlX2gKKyNk
ZWZpbmUgSW5mZXJyZWRUeXBlX2gKKworI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisj
aW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAi
UHV0QnlJZEZsYWdzLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gVGhpcyBpcyBhbiBvYmplY3QgdXNlZCBmb3IgdGhlIGluZmVyZW5jZSBvZiB0aGUg
dHlwZXMgb2Ygb2JqZWN0IHByb3BlcnRpZXMuCisKK2NsYXNzIEluZmVycmVkVHlwZSBmaW5hbCA6
IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAg
ICBzdGF0aWMgSW5mZXJyZWRUeXBlKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1
Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBlbnVtIEtpbmQgOiB1aW50
OF90IHsKKyAgICAgICAgQm90dG9tLAorICAgICAgICBCb29sZWFuLAorICAgICAgICBPdGhlciwK
KyAgICAgICAgSW50MzIsCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAg
ICBPYmplY3RXaXRoU3RydWN0dXJlLAorICAgICAgICBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhl
ciwKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBPYmplY3RPck90aGVyLAorICAgICAgICBUb3AK
KyAgICB9OworCisgICAgc3RhdGljIEtpbmQga2luZEZvckZsYWdzKFB1dEJ5SWRGbGFncyk7Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgaGFzU3RydWN0dXJlKEtpbmQga2luZCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIE9iamVjdFdpdGhTdHJ1Y3R1cmU6Cisg
ICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGNsYXNzIERlc2NyaXB0b3IgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgRGVzY3JpcHRvcigpCisgICAgICAgICAgICA6IG1fa2luZChCb3R0b20pCisgICAgICAg
ICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIERlc2NyaXB0b3IoS2luZCBraW5kLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHIp
CisgICAgICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAgICAgLCBtX3N0cnVjdHVyZShz
dHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoYXNTdHJ1Y3R1cmUoa2luZCkp
CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgRGVzY3JpcHRvciBmb3JWYWx1ZShKU1ZhbHVlKTsKKworICAgICAgICBzdGF0aWMg
RGVzY3JpcHRvciBmb3JGbGFncyhWTSYsIFB1dEJ5SWRGbGFncyk7CisKKyAgICAgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2tpbmQgIT0gQm90dG9tIHx8IG1fc3RydWN0dXJlOworICAgICAgICB9CisKKyAgICAgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKworICAgICAgICBQdXRCeUlk
RmxhZ3MgcHV0QnlJZEZsYWdzKCkgY29uc3Q7CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBib29s
IGluY2x1ZGVzVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQm90dG9tOgorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCk7CisgICAgICAgICAgICBjYXNlIE90aGVyOgorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgICAgICAg
ICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwor
ICAgICAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlz
TnVtYmVyKCk7CisgICAgICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUuaXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0V2l0aFN0cnVjdHVy
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlOworICAgICAgICAgICAgY2FzZSBPYmplY3RX
aXRoU3RydWN0dXJlT3JPdGhlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKQorICAgICAgICAgICAgICAgICAgICB8fCAodmFsdWUuaXNDZWxsKCkgJiYg
dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpID09IG1fc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pc09iamVjdCgpOwor
ICAgICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8IHZhbHVlLmlzT2JqZWN0KCk7CisgICAgICAgICAg
ICBjYXNlIFRvcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAg
ICAgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEZXNjcmlwdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8U3RydWN0dXJlKj46Omhhc2gobV9zdHJ1Y3R1
cmUpIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgdm9pZCBtZXJnZShjb25zdCBEZXNjcmlwdG9yJik7CisgICAgICAgIHZvaWQgcmVtb3Zl
U3RydWN0dXJlKCk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgZGVzY3JpcHRv
ciBpcyBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb3RoZXIgb25lLgorICAgICAgICBib29sIHN1YnN1
bWVzKGNvbnN0IERlc2NyaXB0b3ImKSBjb25zdDsKKworICAgICAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEtpbmQgbV9raW5k
OworICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIH07CisKKyAgICBDb25jdXJy
ZW50SklUTG9jayYgbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgRGVzY3Jp
cHRvciBkZXNjcmlwdG9yTWFpblRocmVhZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
RGVzY3JpcHRvcihtX2tpbmQsIG1fc3RydWN0dXJlID8gbV9zdHJ1Y3R1cmUtPnN0cnVjdHVyZSgp
IDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAgIERlc2NyaXB0b3IgZGVzY3JpcHRvcihjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNj
cmlwdG9yTWFpblRocmVhZCgpOworICAgIH0KKyAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IobG9ja2VyKTsKKyAgICB9CisgICAgCisgICAgS2lu
ZCBraW5kKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlcikgY29uc3QgeyByZXR1cm4g
ZGVzY3JpcHRvcihsb2NrZXIpLmtpbmQoKTsgfQorCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBUb3A7IH0KKyAgICBib29sIGlzUmVsZXZhbnQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQgIT0gVG9wOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIEluZmVy
cmVkVHlwZSBpcyBzdGlsbCByZWxldmFudCBhZnRlciB0aGUgc3RvcmUuIEl0J3Mgbm90IHJlbGV2
YW50IGlmIGl0J3MgVG9wLgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB3aWxsU3RvcmVWYWx1ZShW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBEZXNjcmlwdG9yIGN1cnJlbnREZXNjcmlwdG9yID0gZGVzY3JpcHRvck1haW5UaHJl
YWQoKTsKKyAgICAgICAgaWYgKGN1cnJlbnREZXNjcmlwdG9yLmluY2x1ZGVzVmFsdWUodmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREZXNjcmlwdG9yLmtpbmQoKSAhPSBUb3A7Cisg
ICAgICAgIHJldHVybiB3aWxsU3RvcmVWYWx1ZVNsb3codm0sIHByb3BlcnR5TmFtZSwgdmFsdWUp
OworICAgIH0KKworICAgIC8vIEltbWVkaWF0ZWx5IG1ha2VzIHRoaXMgdHlwZSBpcnJlbGV2YW50
LgorICAgIHZvaWQgbWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisg
ICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bWFrZVRvcFNsb3codm0sIHByb3BlcnR5TmFtZSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIGl0IGN1cnJlbnRseSBtYWtlcyBzZW5zZSB0byB3YXRjaCB0aGlzIEluZmVycmVkVHlw
ZSBmb3IgdGhpcyBkZXNjcmlwdG9yLiBOb3RlIHRoYXQKKyAgICAvLyB0aGlzIHdpbGwgYWx3YXlz
IHJldHVybiBmYWxzZSBmb3IgVG9wLgorICAgIGJvb2wgY2FuV2F0Y2goY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyLCBjb25zdCBEZXNjcmlwdG9yJik7CisgICAgYm9vbCBjYW5XYXRj
aChjb25zdCBEZXNjcmlwdG9yJik7CisgICAgCisgICAgdm9pZCBhZGRXYXRjaHBvaW50KGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgV2F0Y2hwb2ludCopOworICAgIHZvaWQgYWRk
V2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBJbmZlcnJlZFR5cGUoVk0mKTsKKyAgICB+SW5mZXJyZWRU
eXBlKCk7CisKKyAgICBib29sIHdpbGxTdG9yZVZhbHVlU2xvdyhWTSYsIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSk7CisgICAgdm9pZCBtYWtlVG9wU2xvdyhWTSYsIFByb3BlcnR5TmFtZSk7CisgICAg
dm9pZCBzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBEZXNjcmlwdG9yKTsKKyAgICB2b2lkIHJlbW92ZVN0cnVjdHVyZSgpOworCisgICAg
bXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CisgICAgCisgICAgS2luZCBtX2tpbmQg
eyBCb3R0b20gfTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludCA6IHB1
YmxpYyBXYXRjaHBvaW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJl
V2F0Y2hwb2ludCgpIHsgfQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaXJlSW50ZXJu
YWwoY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlOworICAgIH07CisKKyAgICBjbGFzcyBJbmZl
cnJlZFN0cnVjdHVyZUZpbmFsaXplciA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyKCkgeyB9Cisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3Zl
cnJpZGU7CisgICAgfTsKKworICAgIGNsYXNzIEluZmVycmVkU3RydWN0dXJlIHsKKyAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBJbmZlcnJlZFN0
cnVjdHVyZShWTSYsIEluZmVycmVkVHlwZSogcGFyZW50LCBTdHJ1Y3R1cmUqKTsKKworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgp
OyB9OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVkVHlwZTsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3RydWN0dXJlV2F0Y2hwb2ludDsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIEluZmVycmVkU3RydWN0dXJlRmluYWxpemVyOworICAgICAgICAKKyAg
ICAgICAgSW5mZXJyZWRUeXBlKiBtX3BhcmVudDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVXYXRjaHBvaW50
IG1fd2F0Y2hwb2ludDsKKyAgICAgICAgSW5mZXJyZWRTdHJ1Y3R1cmVGaW5hbGl6ZXIgbV9maW5h
bGl6ZXI7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmZlcnJlZFN0cnVjdHVyZT4g
bV9zdHJ1Y3R1cmU7CisKKyAgICAvLyBOT1RFOiBJZiB0aGlzIGlzIGJlaW5nIHdhdGNoZWQsIHdl
IHRyYW5zZm9ybSB0byBUb3AgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCBpdCB3b3VsZG4ndCBi
ZQorICAgIC8vIHByb2ZpdGFibGUgdG8gd2F0Y2ggaXQgYWdhaW4uIEFsc28sIHRoaXMgc2V0IGlz
IGluaXRpYWxpemVkIGNsZWFyLCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byB0aGUgREZHCisgICAg
Ly8gdGhyZWFkLiBUaGUgREZHIHdpbGwgdXNlIHRoZSBJbmZlcnJlZFR5cGUgYXMgdGhlIHRoaW5n
IHRoYXQgaXQgd2F0Y2hlcy4KKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fd2F0Y2hwb2ludFNl
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpJbmZlcnJlZFR5cGU6OktpbmQpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEluZmVycmVkVHlwZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVHlwZVRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFR5cGVUYWJsZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJl
ZFR5cGVUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRUeXBlVGFi
bGU6OnNfaW5mbyA9IHsgIkluZmVycmVkVHlwZVRhYmxlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShJbmZlcnJlZFR5cGVUYWJsZSkgfTsKKworSW5mZXJyZWRUeXBlVGFibGUqIEluZmVycmVk
VHlwZVRhYmxlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVHlwZVRhYmxlKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFR5cGVUYWJsZT4odm0uaGVh
cCkpIEluZmVycmVkVHlwZVRhYmxlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVHlwZVRhYmxlOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBl
VGFibGUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFR5cGVUYWJsZSo+KGNlbGwpOworICAgIGluZmVy
cmVkVHlwZVRhYmxlLT5JbmZlcnJlZFR5cGVUYWJsZTo6fkluZmVycmVkVHlwZVRhYmxlKCk7Cit9
CisKK1N0cnVjdHVyZSogSW5mZXJyZWRUeXBlVGFibGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5m
ZXJyZWRUeXBlVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFR5cGVUYWJsZSogaW5mZXJyZWRUeXBlVGFibGUgPSBq
c0Nhc3Q8SW5mZXJyZWRUeXBlVGFibGUqPihjZWxsKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKGluZmVycmVkVHlwZVRhYmxlLT5tX2xvY2spOworICAgIAorICAgIGZvciAoYXV0
byYgZW50cnkgOiBpbmZlcnJlZFR5cGVUYWJsZS0+bV90YWJsZSkgeworICAgICAgICBpZiAoIWVu
dHJ5LnZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChlbnRyeS52YWx1
ZS0+aXNSZWxldmFudCgpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJ5LnZhbHVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnkudmFsdWUuY2xlYXIoKTsKKyAgICB9
Cit9CisKK0luZmVycmVkVHlwZSogSW5mZXJyZWRUeXBlVGFibGU6OmdldChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBhdXRvIGl0ZXIg
PSBtX3RhYmxlLmZpbmQodWlkKTsKKyAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFp
dGVyLT52YWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBUYWtlIHRoaXMg
b3Bwb3J0dW5pdHkgdG8gcHJ1bmUgaW52YWxpZGF0ZWQgdHlwZXMuCisgICAgaWYgKCFpdGVyLT52
YWx1ZS0+aXNSZWxldmFudCgpKSB7CisgICAgICAgIGl0ZXItPnZhbHVlLmNsZWFyKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBpdGVyLT52YWx1ZS5nZXQo
KTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJlZFR5cGVUYWJsZTo6Z2V0KFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICByZXR1cm4gZ2V0KGxvY2tlciwgdWlkKTsKK30KKworSW5mZXJyZWRUeXBlKiBJbmZlcnJl
ZFR5cGVUYWJsZTo6Z2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJu
IGdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworfQorCitib29sIEluZmVycmVkVHlwZVRhYmxlOjp3
aWxsU3RvcmVWYWx1ZSgKKyAgICBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFN0b3JlZFByb3BlcnR5QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3Jp
dGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVz
IHRoZSBoYXNoIG1hcC4KKyAgICAKKyAgICBpZiAoYWdlID09IE9sZFByb3BlcnR5KSB7CisgICAg
ICAgIFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9IG1fdGFibGUuZmluZChwcm9wZXJ0eU5hbWUu
dWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3RhYmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWJzZW5jZSBvbiByZXBsYWNlID0+IHRv
cC4KKyAgICAgICAgCisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+d2lsbFN0b3JlVmFsdWUodm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IAorICAgICAgICBpdGVyLT52YWx1ZS5jbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgVGFibGVUeXBlOjpBZGRSZXN1bHQgcmVzdWx0OworICAgIHsKKyAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmVzdWx0ID0gbV90
YWJsZS5hZGQocHJvcGVydHlOYW1lLnVpZCgpLCBXcml0ZUJhcnJpZXI8SW5mZXJyZWRUeXBlPigp
KTsKKyAgICB9CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEluZmVycmVk
VHlwZSogaW5mZXJyZWRUeXBlID0gSW5mZXJyZWRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNl
dCh2bSwgdGhpcywgaW5mZXJyZWRUeXBlKTsKKyAgICB9IGVsc2UgaWYgKCFyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5j
bGVhcigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbmZlcnJlZFR5cGVUYWJsZTo6
bWFrZVRvcChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFN0b3JlZFByb3BlcnR5
QWdlIGFnZSkKK3sKKyAgICAvLyBUaGUgYWxnb3JpdGhtIGhlcmUgcmVsaWVzIG9uIHRoZSBmYWN0
IHRoYXQgb25seSBvbmUgdGhyZWFkIG1vZGlmaWVzIHRoZSBoYXNoIG1hcC4KKyAgICBpZiAoYWdl
ID09IE9sZFByb3BlcnR5KSB7CisgICAgICAgIFRhYmxlVHlwZTo6aXRlcmF0b3IgaXRlciA9IG1f
dGFibGUuZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3Rh
YmxlLmVuZCgpIHx8ICFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsgLy8gQWJzZW5j
ZSBvbiByZXBsYWNlID0+IHRvcC4KKworICAgICAgICBpdGVyLT52YWx1ZS0+bWFrZVRvcCh2bSwg
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgaXRlci0+dmFsdWUuY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFRhYmxlVHlwZTo6QWRkUmVzdWx0IHJlc3VsdDsKKyAgICB7Cisg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJlc3Vs
dCA9IG1fdGFibGUuYWRkKHByb3BlcnR5TmFtZS51aWQoKSwgV3JpdGVCYXJyaWVyPEluZmVycmVk
VHlwZT4oKSk7CisgICAgfQorICAgIGlmICghcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1ha2VUb3Aodm0s
IHByb3BlcnR5TmFtZSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5jbGVhcigpOworfQor
CitJbmZlcnJlZFR5cGVUYWJsZTo6SW5mZXJyZWRUeXBlVGFibGUoVk0mIHZtKQorICAgIDogQmFz
ZSh2bSwgdm0uaW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCit7Cit9CisKK0luZmVy
cmVkVHlwZVRhYmxlOjp+SW5mZXJyZWRUeXBlVGFibGUoKQoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBl
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZl
cnJlZFR5cGVUYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRUeXBlVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEluZmVycmVkVHlwZVRhYmxlX2gKKyNkZWZpbmUgSW5mZXJyZWRUeXBlVGFibGVfaAorCisjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkluZmVycmVkVHlwZS5oIgorI2luY2x1ZGUg
IkpTQ2VsbC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0YWJsZSBvZiBpbmZlcnJlZCB0
eXBlcyBmb3Igc29tZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBKU0NlbGwgYmVjYXVzZSB0aGF0IHNp
bXBsaWZpZXMgdGhlIFN0cnVjdHVyZQorLy8gZGVzdHJ1Y3RvciBhbmQgbWFrZXMgbGlmZXRpbWUg
ZWFzaWVyIHRvIG1hbmFnZS4gRm9yIGV4YW1wbGUsIHNpbmNlIGl0J3MgYSBjZWxsLCB3ZSBrbm93
IHRoYXQgdGhpcyB0aGluZworLy8gY2Fubm90IGJlIGRlbGV0ZWQgd2hpbGUgdGhlIERGRyBpcyBy
dW5uaW5nLiBUaGlzIGlzIHNlcGFyYXRlIGZyb20gUHJvcGVydHlUYWJsZSBiZWNhdXNlIG1vc3Qg
cHJvcGVydGllcworLy8gd2lsbCBub3QgaGF2ZSBhbiBJbmZlcnJlZFR5cGUsIHNpbmNlIG1vc3Qg
cHJvcGVydGllcyBhcmUgaW4gZGljdGlvbmFyaWVzIChpZiB5b3UgdGhpbmsgb2YgImEgcHJvcGVy
dHkiCisvLyBhcyBiZWluZyAiYSBwcm9wZXJ0eSBpbiBzb21lIFN0cnVjdHVyZSIpLiBBbHNvLCB0
aGlzIHdpbGwgaGFwcGlseSBjb25mbGF0ZSB0aGUgdHlwZXMgb2YgcHJvcGVydGllcyBmcm9tCisv
LyBkaWZmZXJlbnQgc3RydWN0dXJlcyBldmVuIGlmIHRoZSBzdHJ1Y3R1cmVzIHJlcHJlc2VudCBk
aXNqb2ludCBzZXRzIG9mIG9iamVjdHMuCisKK2NsYXNzIEluZmVycmVkVHlwZVRhYmxlIGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKwor
ICAgIHN0YXRpYyBJbmZlcnJlZFR5cGVUYWJsZSogY3JlYXRlKFZNJik7CisKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgQ29uY3VycmVu
dEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFibGUuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBHZXQgdGhlIGN1
cnJlbnQgaW5mZXJyZWQgdHlwZS4gUmV0dXJucyBudWxscHRyIGZvciBib3RoIFRvcCBhbmQgQm90
dG9tLiBOdWxsIG1lYW5zIEJvdHRvbSBpZiB0aGUKKyAgICAvLyBvd25pbmcgU3RydWN0dXJlIGRv
ZXNuJ3Qga25vdyBhYm91dCB0aGUgcHJvcGVydHkuCisgICAgSW5mZXJyZWRUeXBlKiBnZXQoY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgSW5mZXJy
ZWRUeXBlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICBJbmZlcnJlZFR5cGUqIGdldChQ
cm9wZXJ0eU5hbWUpOworCisgICAgZW51bSBTdG9yZWRQcm9wZXJ0eUFnZSB7CisgICAgICAgIE5l
d1Byb3BlcnR5LAorICAgICAgICBPbGRQcm9wZXJ0eQorICAgIH07CisgICAgCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBJbmZlcnJlZFR5cGUgZm9yIHRoaXMgcHJvcGVydHkgaXMgc3RpbGwg
cmVsZXZhbnQgYWZ0ZXIgdGhlIHN0b3JlLiBJdCdzIG5vdAorICAgIC8vIHJlbGV2YW50IGlmIGl0
J3MgVG9wLiBOb3RlIHRoYXQgdGhpcyB0YWJsZSB3aWxsIGludGVybmFsbHkgcHJ1bmUgVG9wIGVu
dHJpZXMuCisgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgU3RvcmVkUHJvcGVydHlBZ2UpOworCisgICAgLy8gSW52YWxpZGF0ZXMgdGhlIHR5cGUgZm9y
IHRoZSBwcm9wZXJ0eS4gVXNlZnVsIGlmIHdlIGRldGVjdCBhIHN0b3JlIGluIGEgcmVmbGVjdGl2
ZSBjb250ZXh0LgorICAgIHZvaWQgbWFrZVRvcChWTSYsIFByb3BlcnR5TmFtZSwgU3RvcmVkUHJv
cGVydHlBZ2UpOworCitwcml2YXRlOgorICAgIEluZmVycmVkVHlwZVRhYmxlKFZNJik7CisgICAg
fkluZmVycmVkVHlwZVRhYmxlKCk7CisKKyAgICAvLyBCb3R0b206IGFic2VuY2UgZnJvbSB0YWJs
ZS4KKyAgICAvLyBUb3A6IG51bGwgdmFsdWUgaW4gdGFibGUsICF2YWx1ZS0+aXNSZWxldmFudCgp
LCBvciBhYnNlbmNlIGZyb20gdGFibGUuCisgICAgLy8KKyAgICAvLyBXZSBrbm93IGhvdyB0byBk
ZXRlcm1pbmUgaWYgYWJzZW5jZSBmcm9tIHRoZSB0YWJsZSBpcyBib3R0b20gb3IgdG9wIGRlcGVu
ZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIC8vIHByb3BlcnR5IGlzIHByZXNlbnQgaW4gdGhlIG93
bmluZyBzdHJ1Y3R1cmUuIEhlbmNlLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSwgYWJzZW5j
ZSBtYXkgaGF2ZQorICAgIC8vIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIHdheSB0aGF0IHRoaXMg
Y2xhc3MgZGV0ZXJtaW5lcyBpZiB0aGUgb3duaW5nIHN0cnVjdHVyZSBrbm93cyBvZiB0aGUgcHJv
cGVydHkKKyAgICAvLyBpcyB0aGF0IHdlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhY3Rpb25zOiBy
ZXBsYWNlIG9yIHRyYW5zaXRpb24uIElmIHdlJ3JlIGFkZGluZyBhIG5ldyBwcm9wZXJ0eQorICAg
IC8vICh0cmFuc2l0aW9uKSwgdGhlbiBhYnNlbmNlIG1lYW5zIGJvdHRvbS4gSWYgd2UncmUgc3Rv
cmluZyB0byBhbiBleGlzdGluZyBwcm9wZXJ0eSAocmVwbGFjZSksIHRoZW4KKyAgICAvLyBhYnNl
bmNlIG1lYW5zIHRvcC4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIGhhdmUgdG8gd2F0Y2ggb3V0IGZv
ciB0aGUgY2FzZSB3aGVyZSB0d28gc3RydWN0dXJlcywgUzEgYW5kCisgICAgLy8gUzIsIHNoYXJl
IHRoZSBzYW1lIEluZmVycmVkVHlwZVRhYmxlIGFuZCBuZWl0aGVyIG9mIHRoZW0gaW5pdGlhbGx5
IGtub3cgYWJvdXQgcHJvcGVydHkgUC4gUzEgbWF5CisgICAgLy8gd2FudCB0byBhZGQgUCB3aXRo
b3V0IGEgdHlwZSwgd2hpbGUgUzIgbWF5IHdhbnQgdG8gYWRkIFAgd2l0aCBhIHR5cGUuIElmIFMx
IGFkZGVkIFAgYW5kIHVzZWQgYWJzZW5jZQorICAgIC8vIHRvIGluZGljYXRlIFRvcCwgdGhlbiBT
MiB3b3VsZCB1c2UgdGhhdCBhYnNlbmNlIHRvIG1lYW4gQm90dG9tIGFuZCB3b3VsZCBlbmQgdXAg
Y3JlYXRpbmcgYSBub24tVG9wCisgICAgLy8gZW50cnkgaW4gdGhlIHRhYmxlLiBUaGVuIFMxIHdv
dWxkIGZvcmdldCB0aGF0IGl0IHdhbnRlZCBUb3AsIGFuZCB3b3VsZCB1c2UgUzIncyB0eXBlLiBD
bGVhcmx5LAorICAgIC8vIHRoYXQncyBiYWQuIFdlIGF2b2lkIHN1Y2ggY29uZnVzaW9uIGJ5IGVu
c3VyaW5nIHRoYXQgYSB0cmFuc2l0aW9uIGFsd2F5cyBhZGRzIGFuIGVudHJ5LiBIZW5jZSwKKyAg
ICAvLyBhYnNlbmNlLW1lYW5zLWJvdHRvbSBvbmx5IGNvbWVzIGludG8gcGxheSBmb3IgcHJvcGVy
dGllcyBhZGRlZCBiZWZvcmUgdGhlIEluZmVycmVkVHlwZVRhYmxlIHdhcworICAgIC8vIGNyZWF0
ZWQuCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFdyaXRl
QmFycmllcjxJbmZlcnJlZFR5cGU+LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxVbmlx
dWVkU3RyaW5nSW1wbCo+PiBUYWJsZVR5cGU7CisgICAgCisgICAgVGFibGVUeXBlIG1fdGFibGU7
CisKKyAgICAvLyBXZSBvbmx5IGdyYWIgdGhpcyBsb2NrIHdoZW4gd2UncmUgZG9pbmcgbW9kaWZp
Y2F0aW9ucyBvbiB0aGUgbWFpbiB0aHJlYWQsIG9yIHJlYWRzIG9uIHRoZSBjb21waWxlcgorICAg
IC8vIHRocmVhZC4gVGhlIGNvbXBpbGVyIHRocmVhZCBpcyBub3QgYWxsb3dlZCB0byBkbyBtb2Rp
ZmljYXRpb25zLgorICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRUeXBlVGFibGVfaAorCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTkwMDU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE4OSw2ICsxMTg5LDggQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0p
OwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgIEFTU0VSVCgh
c3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKICAgICAgICAgdW5zaWdu
ZWQgY3VycmVudEF0dHJpYnV0ZXM7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAg
ICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBAIC0xMjI3LDI5ICsxMjI5LDQwIEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRo
aXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpIHsKKyAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAgICAgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgaWYgKG5ld1N0cnVjdHVyZSkgeworICAgICAgICBu
ZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWQpOworICAgICAgICAKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAgICAgICBp
ZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7Ci0gICAg
ICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENh
cGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICBpZiAoY3Vy
cmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAg
ICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAg
ICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENh
cGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1
dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICBwdXREaXJl
Y3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMs
IG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGN1
cnJlbnRBdHRyaWJ1dGVzOwotICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmli
dXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
IHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3RydWN0
dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhh
c0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVG
b3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICB9CisKICAg
ICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAKQEAgLTEyNjgsMTYgKzEyODEsMTkgQEAgaW5s
aW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIC8vIHdlIHdhbnQuCiAg
ICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRj
aHBvaW50RmlyZTsKICAgICAKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNl
dCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgp
LCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVW
YWx1ZUZvclRyYW5zaXRpb24oCisgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwogICAgIAogICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChv
ZmZzZXQpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5
KHZtLCBzdHJ1Y3R1cmUpOworICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSk7CisgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eSh2bSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7
CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1
dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVBy
b3BlcnRpZXMoKTsKKyAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJv
cGVydGllcygpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzM1LDggKzEzNTEsMTEgQEAg
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5w
dXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBz
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOwor
ICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTEgKzM1MCwxNSBAQCB2
b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZWxzZQogICAgICAg
ICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CiAKKyAgICBJbmZlcnJlZFR5
cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKKwogICAgIGZv
ciAoc2l6ZV90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKTsgaS0tOykgewogICAgICAgICBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2
aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVu
dHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNl
dCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKKyAgICAgICAgaWYgKHR5cGVU
YWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkp
KQorICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKICAgICAgICAgcHJv
cGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTQ2NCw2ICs0NjgsNyBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+
c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlU
YWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5tX29mZnNldDsKKyAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNl
dE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxl
LmdldCgpKTsKIAogICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKIApAQCAtNDc5LDYgKzQ4NCwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKKyAgICAvLyBOT1RFOiBU
aGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMgd2h5IHRoaXMgZ29lcyBkaXJlY3RseSB0byB1bmNh
Y2hlYWJsZSBkaWN0aW9uYXJ5IHJhdGhlciB0aGFuCisgICAgLy8gY2FjaGluZyB0aGUgcmVtb3Zh
bC4gV2UgY2FuIGZpeCBhbGwgb2YgdGhlc2UgdGhpbmdzLCBidXQgd2UgbXVzdCByZW1lbWJlciB0
byBkbyBzbywgaWYgd2UgZXZlciB0cnkKKyAgICAvLyB0byBvcHRpbWl6ZSB0aGlzIGNhc2UuCisg
ICAgLy8KKyAgICAvLyAtIENhY2hlZCB0cmFuc2l0aW9ucyB1c3VhbGx5IHN0ZWFsIHRoZSBwcm9w
ZXJ0eSB0YWJsZSwgYW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGV5
CisgICAgLy8gICBjYW4ganVzdCByZWJ1aWxkIHRoZSB0YWJsZSBieSBsb29raW5nIGF0IHBhc3Qg
dHJhbnNpdGlvbnMuIFRoYXQgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHRhYmxlIG9ubHkKKyAgICAv
LyAgIGdyZXcgYW5kIG5ldmVyIHNocmFuay4gVG8gc3VwcG9ydCByZW1vdmFscywgd2UnZCBoYXZl
IHRvIGNoYW5nZSB0aGUgcHJvcGVydHkgdGFibGUgbWF0ZXJpYWxpemF0aW9uCisgICAgLy8gICBj
b2RlIHRvIGhhbmRsZSBkZWxldGlvbnMuIEFsc28sIHdlIGhhdmUgbG9naWMgdG8gZ2V0IHRoZSBs
aXN0IG9mIHByb3BlcnRpZXMgb24gYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vICAgbGFja3MgYSBw
cm9wZXJ0eSB0YWJsZSBieSBqdXN0IGxvb2tpbmcgYmFjayB0aHJvdWdoIHRoZSBzZXQgb2YgdHJh
bnNpdGlvbnMgc2luY2UgdGhlIGxhc3QKKyAgICAvLyAgIHN0cnVjdHVyZSB0aGF0IGhhZCBhIHBp
bm5lZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUgY2hhbmdlZCB0byBo
YW5kbGUgY2FjaGVkCisgICAgLy8gICByZW1vdmFscy4KKyAgICAvLworICAgIC8vIC0gSW5mZXJy
ZWRUeXBlVGFibGUgYXNzdW1lcyB0aGF0IHJlbW92YWwgaGFzIG5ldmVyIGhhcHBlbmVkLiBUaGlz
IGlzIGltcG9ydGFudCBzaW5jZSBpZiB3ZSBjb3VsZAorICAgIC8vICAgcmVtb3ZlIGEgcHJvcGVy
dHkgYW5kIHRoZW4gcmUtYWRkIGl0IGxhdGVyLCB0aGVuIHRoZSAiYWJzZW5jZSBtZWFucyB0b3Ai
IG9wdGltaXphdGlvbiB3b3VsZG4ndAorICAgIC8vICAgd29yayBhbnltb3JlLCB1bmxlc3MgcmVt
b3ZhbCBhbHNvIGVpdGhlciBwb2lzb25lZCB0eXBlIGluZmVyZW5jZSAoYnkgZG9pbmcgc29tZXRo
aW5nIGVxdWl2YWxlbnQgdG8KKyAgICAvLyAgIGhhc0JlZW5EaWN0aW9uYXJ5KSBvciBieSBzdHJv
bmdseSBtYXJraW5nIHRoZSBlbnRyeSBhcyBUb3AgYnkgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3Qg
YWJzZW50LCBidXQKKyAgICAvLyAgIGluc3RlYWQsIGhhcyBhIG51bGwgZW50cnkuCisgICAgCiAg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwogCiAgICAg
U3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUpOwpAQCAtODQxLDYgKzg2NCw0MyBAQCB2b2lkIFN0cnVjdHVyZTo6c3Rh
cnRXYXRjaGluZ0ludGVybmFsUHJvCiAgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMo
dHJ1ZSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCisgICAgVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZE9wdGltaXplLAorICAgIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSBhZ2Up
Cit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKKyAgICBBU1NFUlQoIWhhc0JlZW5EaWN0
aW9uYXJ5KCkpOworCisgICAgLy8gQ3JlYXRlIHRoZSBpbmZlcnJlZCB0eXBlIHRhYmxlIGJlZm9y
ZSBkb2luZyBhbnl0aGluZyBlbHNlLCBzbyB0aGF0IHdlIGRvbid0IEdDIGFmdGVyIHdlIGhhdmUg
YWxyZWFkeQorICAgIC8vIGdyYWJiZWQgYSBwb2ludGVyIGludG8gdGhlIHByb3BlcnR5IG1hcC4K
KyAgICBJbmZlcnJlZFR5cGVUYWJsZSogdGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgp
OworICAgIGlmICghdGFibGUpIHsKKyAgICAgICAgdGFibGUgPSBJbmZlcnJlZFR5cGVUYWJsZTo6
Y3JlYXRlKHZtKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9p
bmZlcnJlZFR5cGVUYWJsZS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKKyAgICB9CisKKyAgICAvLyBU
aGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEgcHJvcGVydHkgdGFibGUuCisgICAgUHJvcGVy
dHlUYWJsZSogcHJvcGVydHlUYWJsZTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOworCisgICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRo
aXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdpdmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0
aGF0IGl0IHdhcyBwcmVzZW50CisgICAgLy8gYWxyZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEgcHJv
cGVydHkgdGFibGUgbm93LgorICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKTsKKworICAgIC8vIC4u
LiBhbmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4KKyAgICBQcm9wZXJ0eU1hcEVudHJ5
KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAgIEFT
U0VSVChlbnRyeSk7CisKKyAgICBpZiAoc2hvdWxkT3B0aW1pemUpCisgICAgICAgIGVudHJ5LT5o
YXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2lsbFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIGFnZSk7CisgICAgZWxzZSB7CisgICAgICAgIHRhYmxlLT5tYWtlVG9wKHZtLCBwcm9w
ZXJ0eU5hbWUsIGFnZSk7CisgICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSBmYWxzZTsK
KyAgICB9Cit9CisKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKIFByb3BlcnR5TWFwSGFz
aFRhYmxlU3RhdHMqIHByb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMgPSAwOwpAQCAtMTA1OCw2ICsx
MTE4LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAg
ICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSkKICAgICAgICAg
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7CisKKyAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbmZlcnJlZFR5cGVUYWJsZSk7CiB9CiAKIGJvb2wgU3Ry
dWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNs
dWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5
cGUuaCIKQEAgLTgxLDExICs4MiwxMyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAg
dWludDhfdCBhdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOyAvLyBUaGlzIGNh
Y2hlcyB3aGV0aGVyIG9yIG5vdCBhIHByb3BlcnR5IGhhcyBhbiBpbmZlcnJlZCB0eXBlIGluIHRo
ZSBpbmZlcnJlZCB0eXBlIHRhYmxlLCBhbmQgaXMgdXNlZCBmb3IgYSBmYXN0IGNoZWNrIGluIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgpLgogCiAgICAgUHJvcGVydHlNYXBFbnRyeSgpCiAg
ICAgICAgIDoga2V5KG51bGxwdHIpCiAgICAgICAgICwgb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAg
ICAgICAgICwgYXR0cmlidXRlcygwKQorICAgICAgICAsIGhhc0luZmVycmVkVHlwZShmYWxzZSkK
ICAgICB7CiAgICAgfQogICAgIApAQCAtOTMsNiArOTYsNyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBF
bnRyeSB7CiAgICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAg
ICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgLCBoYXNJbmZlcnJlZFR5cGUo
ZmFsc2UpCiAgICAgewogICAgICAgICBBU1NFUlQodGhpcy0+YXR0cmlidXRlcyA9PSBhdHRyaWJ1
dGVzKTsKICAgICB9CkBAIC0zMjMsNiArMzI3LDcgQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlP
ZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0m
LCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKTsKKyAgICBQcm9wZXJ0eU9mZnNl
dCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29sJiBoYXNJ
bmZlcnJlZFR5cGUpOwogCiAgICAgLy8gVGhpcyBpcyBhIHNvbWV3aGF0IGludGVybmFsaXNoIG1l
dGhvZC4gSXQgd2lsbCBjYWxsIHlvdXIgZnVuY3RvciB3aGlsZSBwb3NzaWJseSBob2xkaW5nIHRo
ZQogICAgIC8vIFN0cnVjdHVyZSdzIGxvY2suIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB3aGV0aGVy
IHRoZSBsb2NrIGlzIGhlbGQgb3Igbm90IGluIGFueSBwYXJ0aWN1bGFyCkBAIC00ODEsNiArNDg2
LDQwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVy
bmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsKICAgICB9CiAKKyAgICBib29sIGhhc0luZmVy
cmVkVHlwZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhbV9pbmZlcnJlZFR5cGVU
YWJsZTsKKyAgICB9CisKKyAgICBJbmZlcnJlZFR5cGUqIGluZmVycmVkVHlwZUZvcihVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZVRhYmxlKiB0
YWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gdGFi
bGUtPmdldCh1aWQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3IgaW5mZXJyZWRUeXBlRGVzY3JpcHRvckZvcihVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogcmVzdWx0ID0g
aW5mZXJyZWRUeXBlRm9yKHVpZCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LT5kZXNjcmlw
dG9yKCk7CisgICAgICAgIHJldHVybiBJbmZlcnJlZFR5cGU6OlRvcDsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgd2lsbFN0b3JlVmFsdWVGb3JUcmFuc2l0aW9uKAorICAgICAgICBW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkT3B0aW1pemUpCisgICAgeworICAgICAgICBpZiAoaGFzQmVlbkRpY3Rpb25hcnkoKSB8fCAo
IXNob3VsZE9wdGltaXplICYmICFtX2luZmVycmVkVHlwZVRhYmxlKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgd2lsbFN0b3JlVmFsdWVTbG93KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzaG91bGRPcHRpbWl6ZSwgSW5mZXJyZWRUeXBlVGFibGU6Ok5ld1Byb3BlcnR5KTsKKyAgICB9
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHdpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAg
ICAgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZE9wdGltaXplKQorICAgIHsKKyAgICAgICAgaWYgKGhhc0JlZW5EaWN0aW9uYXJ5KCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdpbGxTdG9yZVZhbHVlU2xvdyh2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUsIEluZmVycmVkVHlwZVRhYmxlOjpPbGRQ
cm9wZXJ0eSk7CisgICAgfQorCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1
Y3R1cmVTaGFwZShKU1ZhbHVlKTsKICAgICAKICAgICAvLyBEZXRlcm1pbmVzIGlmIHRoZSB0d28g
c3RydWN0dXJlcyBtYXRjaCBlbm91Z2ggdGhhdCB0aGlzIG9uZSBjb3VsZCBiZSB1c2VkIGZvciBh
bGxvY2F0aW9ucwpAQCAtNjMyLDYgKzY3MSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBz
dGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHdpbGxTdG9yZVZhbHVlU2xvdygKKyAgICAgICAgVk0mLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wsIEluZmVycmVkVHlwZVRhYmxlOjpTdG9yZWRQcm9wZXJ0eUFnZSk7CisK
ICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0
YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1
MTI7CiAKQEAgLTY1NSw2ICs2OTcsOCBAQCBwcml2YXRlOgogICAgIC8vIFNob3VsZCBiZSBhY2Nl
c3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRv
IDAgYnkgYW5vdGhlciB0aHJlYWQuCiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1f
cHJvcGVydHlUYWJsZVVuc2FmZTsKIAorICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGVUYWJs
ZT4gbV9pbmZlcnJlZFR5cGVUYWJsZTsKKwogICAgIG11dGFibGUgSW5saW5lV2F0Y2hwb2ludFNl
dCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCiAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgPCAyNTYsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0X2ZpdHMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAko
cmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc1LDE5ICs3NSwxOSBAQCBpbmxpbmUg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnN0b3JlZFByb3RvCiAKIEFMV0FZU19JTkxJTkUgUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQogewotICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJv
cGVydHlUYWJsZTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHBy
b3BlcnR5VGFibGUpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIGlu
dmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFi
bGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5v
ZmZzZXQgOiBpbnZhbGlkT2Zmc2V0OworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgYm9v
bCBoYXNJbmZlcnJlZFR5cGU7CisgICAgcmV0dXJuIGdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwogfQogICAgIAogQUxXQVlTX0lOTElORSBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogeworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAg
IHJldHVybiBnZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBl
KTsKK30KKworQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBib29s
JiBoYXNJbmZlcnJlZFR5cGUpCit7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIApAQCAt
MTAxLDYgKzEwMSw3IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoK
ICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnkt
PmF0dHJpYnV0ZXM7CisgICAgaGFzSW5mZXJyZWRUeXBlID0gZW50cnktPmhhc0luZmVycmVkVHlw
ZTsKICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJs
ZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCkBAIC0yNDEsNiArMjQyLDggQEAgVk06OlZNKFZN
VHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0
YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVmFs
dWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJyZWRUeXBlU3RydWN0dXJlLnNldCgqdGhpcywg
SW5mZXJyZWRUeXBlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
aW5mZXJyZWRUeXBlVGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFR5cGVUYWJsZTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9uUmFyZURh
dGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZXhjZXB0aW9uU3RydWN0dXJlLnNldCgqdGhpcywg
RXhjZXB0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJv
bWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMTkwMDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiw4IEBAIHB1YmxpYzoKICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGlu
ZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRUeXBl
U3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVHlwZVRhYmxlU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmU7CiAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gZXhjZXB0aW9uU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLWJvb2xlYW4tdGhlbi1zdHJpbmcuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtYm9v
bGVhbi10aGVuLXN0cmluZy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLWJvb2xlYW4tdGhlbi1zdHJpbmcuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyOSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gISFv
LmY7Cit9CisKK2Z1bmN0aW9uIGJhcihvLCB2KSB7CisgICAgby5mID0gdjsKK30KKworbm9Jbmxp
bmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK3ZhciBvID0ge307Citmb3IgKHZhciBpID0gMDsg
aSA8IDU7ICsraSkKKyAgICBiYXIobywgdHJ1ZSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0g
dHJ1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQor
CitiYXIobywgImhlbGxvIik7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPT0g
dHJ1ZSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kICh0cnVlKTogIiArIHJl
c3VsdDsKK2JhcihvLCAiIik7CityZXN1bHQgPSBmb28obyk7CitpZiAocmVzdWx0ICE9PSBmYWxz
ZSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kIChmYWxzZSk6ICIgKyByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1p
bnQzMi10aGVuLXN0cmluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1pbnQzMi10aGVuLXN0cmluZy5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLWludDMyLXRo
ZW4tc3RyaW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGZv
byhvKSB7CisgICAgcmV0dXJuIG8uZiArIDE7Cit9CisKK2Z1bmN0aW9uIGJhcihvLCB2KSB7Cisg
ICAgby5mID0gdjsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK3ZhciBv
ID0ge307Citmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkKKyAgICBiYXIobywgNDIpOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8p
OworICAgIGlmIChyZXN1bHQgIT09IDQzKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7Cit9CisKK2JhcihvLCAiaGVsbG8iKTsKK3ZhciByZXN1bHQgPSBmb28o
byk7CitpZiAocmVzdWx0ICE9PSAiaGVsbG8xIikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9wcm9wLXR5cGUtbnVtYmVyLXRoZW4tc3RyaW5nLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLW51bWJlci10aGVuLXN0
cmluZy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvcHJvcC10eXBlLW51bWJlci10aGVuLXN0cmluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI1IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmYgKyAxOworfQorCitm
dW5jdGlvbiBiYXIobywgdikgeworICAgIG8uZiA9IHY7Cit9CisKK25vSW5saW5lKGZvbyk7Citu
b0lubGluZShiYXIpOworCit2YXIgbyA9IHt9OworZm9yICh2YXIgaSA9IDA7IGkgPCA1OyArK2kp
CisgICAgYmFyKG8sIDQuMik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0gNS4yKQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK2JhcihvLCAiaGVs
bG8iKTsKK3ZhciByZXN1bHQgPSBmb28obyk7CitpZiAocmVzdWx0ICE9PSAiaGVsbG8xIikKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtb2JqZWN0LW9yLW90aGVy
LXRoZW4tc3RyaW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHJvcC10eXBlLW9iamVjdC1vci1vdGhlci10aGVuLXN0cmluZy5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLW9i
amVjdC1vci1vdGhlci10aGVuLXN0cmluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMz
IEBACitTdHJpbmcucHJvdG90eXBlLmcgPSA0NDsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBy
ZXR1cm4gby5mID09IHt0b1N0cmluZzpmdW5jdGlvbigpIHsgcmV0dXJuICJoZWxsbyI7IH19Owor
fQorCitmdW5jdGlvbiBiYXIobywgdikgeworICAgIG8uZiA9IHY7Cit9CisKK25vSW5saW5lKGZv
byk7Citub0lubGluZShiYXIpOworCit2YXIgbyA9IHt9OwordmFyIHAgPSB7fTsKK2ZvciAodmFy
IGkgPSAwOyBpIDwgNTsgKytpKQorICAgIGJhcihvLCBudWxsKTsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgNTsgKytpKQorICAgIGJhcihwLCB7Zzo0M30pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQgIT09
IGZhbHNlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIG86ICIgKyByZXN1
bHQ7CisgICAgcmVzdWx0ID0gZm9vKHApOworICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIHA6ICIgKyByZXN1bHQ7Cit9CisKK2Jh
cihvLCAiaGVsbG8iKTsKK3ZhciByZXN1bHQgPSBmb28obyk7CitpZiAocmVzdWx0ICE9PSB0cnVl
KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1vYmplY3QtdGhl
bi1zdHJpbmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm9wLXR5cGUtb2JqZWN0LXRoZW4tc3RyaW5nLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtb2JqZWN0LXRoZW4tc3Ry
aW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7
CisgICAgcmV0dXJuIG8uZiA9PSB7dG9TdHJpbmc6ZnVuY3Rpb24oKSB7IHJldHVybiAiaGVsbG8i
OyB9fTsKK30KKworZnVuY3Rpb24gYmFyKG8sIHYpIHsKKyAgICBvLmYgPSB2OworfQorCitub0lu
bGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKwordmFyIG8gPSB7fTsKK2ZvciAodmFyIGkgPSAw
OyBpIDwgNTsgKytpKQorICAgIGJhcihvLCB7fSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0g
ZmFsc2UpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30K
KworYmFyKG8sICJoZWxsbyIpOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT09
IHRydWUpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLW90aGVy
LXRoZW4tc3RyaW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHJvcC10eXBlLW90aGVyLXRoZW4tc3RyaW5nLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtb3RoZXItdGhlbi1z
dHJpbmcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24gZm9vKG8p
IHsKKyAgICByZXR1cm4gby5mID09ICJoZWxsbyI7Cit9CisKK2Z1bmN0aW9uIGJhcihvLCB2KSB7
CisgICAgby5mID0gdjsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK3Zh
ciBvID0ge307Citmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkKKyAgICBiYXIobywgbnVsbCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBm
b28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworYmFyKG8sICJoZWxsbyIpOwordmFyIHJlc3Vs
dCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT09IHRydWUpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cmluZy10aGVuLW9iamVjdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1zdHJpbmctdGhl
bi1vYmplY3QuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3Byb3AtdHlwZS1zdHJpbmctdGhlbi1vYmplY3QuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mICsgIiB3b3Js
ZCI7Cit9CisKK2Z1bmN0aW9uIGJhcihvLCB2KSB7CisgICAgby5mID0gdjsKK30KKworbm9Jbmxp
bmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK3ZhciBvID0ge307Citmb3IgKHZhciBpID0gMDsg
aSA8IDU7ICsraSkKKyAgICBiYXIobywgImhlbGxvIik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAh
PSAiaGVsbG8gd29ybGQiKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9CisKK2JhcihvLCB7dG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gImhlbGxv
IjsgfX0pOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT0gImhlbGxvIHdvcmxk
IikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtc3RydWN0LW9y
LW90aGVyLXRoZW4tc3RyaW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cnVjdC1vci1vdGhlci10aGVuLXN0cmluZy5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10
eXBlLXN0cnVjdC1vci1vdGhlci10aGVuLXN0cmluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM2IEBACitTdHJpbmcucHJvdG90eXBlLmcgPSA0NDsKKworZnVuY3Rpb24gZm9vKG8pIHsK
KyAgICB2YXIgdG1wID0gby5mOworICAgIGlmICh0bXApCisgICAgICAgIHJldHVybiB0bXAuZzsK
KyAgICByZXR1cm4gNDI7Cit9CisKK2Z1bmN0aW9uIGJhcihvLCB2KSB7CisgICAgby5mID0gdjsK
K30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK3ZhciBvID0ge307Cit2YXIg
cCA9IHt9OworZm9yICh2YXIgaSA9IDA7IGkgPCA1OyArK2kpCisgICAgYmFyKG8sIG51bGwpOwor
Zm9yICh2YXIgaSA9IDA7IGkgPCA1OyArK2kpCisgICAgYmFyKHAsIHtnOjQzfSk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7Cisg
ICAgaWYgKHJlc3VsdCAhPT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBm
b3IgbzogIiArIHJlc3VsdDsKKyAgICByZXN1bHQgPSBmb28ocCk7CisgICAgaWYgKHJlc3VsdCAh
PT0gNDMpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgcDogIiArIHJlc3Vs
dDsKK30KKworYmFyKG8sICJoZWxsbyIpOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1
bHQgIT09IDQ0KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1z
dHJ1Y3QtdGhlbi1vYmplY3Qtb3B0LWZvbGQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtc3RydWN0LXRoZW4tb2JqZWN0LW9wdC1m
b2xkLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9wcm9wLXR5cGUtc3RydWN0LXRoZW4tb2JqZWN0LW9wdC1mb2xkLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRoaXMgaXMgbGlrZSBwcm9wLXR5cGUtc3RydWN0LXRoZW4t
b2JqZWN0LmpzLCBidXQgaXQgY2hlY2tzIHRoYXQgdGhlIG9wdGltaXppbmcgSklUcyBlbWl0IHRo
ZSByaWdodCB0eXBlCisvLyBjaGVjayBhYm92ZSBhIGhvdCBwdXRfYnlfaWQgdGhhdCBzdGFydHMg
cG9seW1vcnBoaWMgYnV0IGlzIGZvbGRlZCBieSBBSS4KKworZnVuY3Rpb24gZm9vKG8pIHsKKyAg
ICByZXR1cm4gby5mLmc7Cit9CisKK2Z1bmN0aW9uIGJhcihvLCBwLCB2KSB7CisgICAgaWYgKGlz
RmluYWxUaWVyKCkgfHwgbyA9PSBwKSB7CisgICAgICAgIHZhciB0bXAgPSBwLmY7CisgICAgICAg
IG8gPSBwOworICAgIH0KKyAgICBvLmYgPSB2OworfQorCitub0lubGluZShmb28pOworbm9Jbmxp
bmUoYmFyKTsKKwordmFyIG8gPSB7Zjp7Zzo0Mn19OworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgYmFyKG8sIG8sIHtnOjQyfSk7CisgICAgYmFyKHthOjEsIGI6Mn0sIG8s
IHtnOjQyfSk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZh
ciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJlc3VsdCAhPT0gNDIpCisgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworYmFyKG8sIG8sIE9iamVjdC5j
cmVhdGUoe2c6NDN9KSk7Cit2YXIgcmVzdWx0ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPT0gNDMp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10eXBlLXN0cnVjdC10aGVu
LW9iamVjdC1vcHQtbXVsdGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtc3RydWN0LXRoZW4tb2JqZWN0LW9wdC1tdWx0aS5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJvcC10
eXBlLXN0cnVjdC10aGVuLW9iamVjdC1vcHQtbXVsdGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMCBAQAorLy8gVGhpcyBpcyBsaWtlIHByb3AtdHlwZS1zdHJ1Y3QtdGhlbi1vYmplY3Qu
anMsIGJ1dCBpdCBjaGVja3MgdGhhdCB0aGUgb3B0aW1pemluZyBKSVRzIGVtaXQgdGhlIHJpZ2h0
IHR5cGUKKy8vIGNoZWNrIGFib3ZlIGEgaG90IHBvbHltb3JwaGljIHB1dF9ieV9pZCB0aGF0IGVu
ZHMgdXAgYmVpbmcgY29tcGlsZWQgYXMgYSBNdWx0aVB1dEJ5T2Zmc2V0LgorCitmdW5jdGlvbiBm
b28obykgeworICAgIHJldHVybiBvLmYuZzsKK30KKworZnVuY3Rpb24gYmFyKG8sIHYpIHsKKyAg
ICBvLmYgPSB2OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKwordmFyIG8g
PSB7Zjp7Zzo0Mn19OworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgYmFy
KG8sIHtnOjQyfSk7CisgICAgYmFyKHthOjEsIGI6Mn0sIDQyKTsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAo
cmVzdWx0ICE9PSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfQorCitiYXIobywgT2JqZWN0LmNyZWF0ZSh7Zzo0M30pKTsKK3ZhciByZXN1bHQgPSBm
b28obyk7CitpZiAocmVzdWx0ICE9PSA0MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
YXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm9wLXR5cGUtc3RydWN0LXRoZW4tb2JqZWN0LW9wdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1zdHJ1Y3QtdGhlbi1v
YmplY3Qtb3B0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9wcm9wLXR5cGUtc3RydWN0LXRoZW4tb2JqZWN0LW9wdC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI4IEBACisvLyBUaGlzIGlzIGxpa2UgcHJvcC10eXBlLXN0cnVjdC10aGVu
LW9iamVjdC5qcywgYnV0IGl0IGNoZWNrcyB0aGF0IHRoZSBvcHRpbWl6aW5nIEpJVHMgZW1pdCB0
aGUgcmlnaHQgdHlwZQorLy8gY2hlY2sgYWJvdmUgYSBob3QgcHV0X2J5X2lkLgorCitmdW5jdGlv
biBmb28obykgeworICAgIHJldHVybiBvLmYuZzsKK30KKworZnVuY3Rpb24gYmFyKG8sIHYpIHsK
KyAgICBvLmYgPSB2OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKwordmFy
IG8gPSB7Zjp7Zzo0Mn19OworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIGJh
cihvLCB7Zzo0Mn0pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2
YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQgIT09IDQyKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK2JhcihvLCBPYmplY3QuY3Jl
YXRlKHtnOjQzfSkpOwordmFyIHJlc3VsdCA9IGZvbyhvKTsKK2lmIChyZXN1bHQgIT09IDQzKQor
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3AtdHlwZS1zdHJ1Y3QtdGhlbi1v
YmplY3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9wcm9wLXR5cGUtc3RydWN0LXRoZW4tb2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm9wLXR5cGUtc3RydWN0LXRoZW4tb2JqZWN0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7Cisg
ICAgcmV0dXJuIG8uZi5nOworfQorCitmdW5jdGlvbiBiYXIobywgdikgeworICAgIG8uZiA9IHY7
Cit9CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCit2YXIgbyA9IHt9OworZm9y
ICh2YXIgaSA9IDA7IGkgPCA1OyArK2kpCisgICAgYmFyKG8sIHtnOjQyfSk7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAg
aWYgKHJlc3VsdCAhPT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKK30KKworYmFyKG8sIE9iamVjdC5jcmVhdGUoe2c6NDN9KSk7Cit2YXIgcmVzdWx0
ID0gZm9vKG8pOworaWYgKHJlc3VsdCAhPT0gNDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTAwNTkpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA5
LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNob3Vs
ZCBpbmZlciBwcm9wZXJ0eSB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ4NjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2Fy
ZW4uCisKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Okhhc2hUYWJs
ZUFkZFJlc3VsdDo6SGFzaFRhYmxlQWRkUmVzdWx0KTogTWFrZSBpdCBwb3NzaWJsZSB0byBzYXkg
Ikhhc2hNYXA6OkFkZFJlc3VsdCByZXN1bHQiIHdpdGhvdXQgYXNzaWduaW5nIGFueXRoaW5nIHRv
IGl0IHlldC4KKyAgICAgICAgKiB3dGYvUHJpbnRTdHJlYW0uaDoKKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6IEJlZWYgdXAgcHJpbnRpbmcgb2Ygc29tZSBjb21tb24gV1RGIHR5cGVzLCBp
biBwYXJ0aWN1bGFyIFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4uCisKIDIwMTUtMDktMjAgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBSZW1v
dmUgWEhSX1RJTUVPVVQgY29tcGlsYXRpb24gZ3VhcmQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZp
c2lvbiAxOTAwNTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg2LDYgKzI4Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH07CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+IHN0cnVjdCBIYXNoVGFibGVBZGRSZXN1bHQgewor
ICAgICAgICBIYXNoVGFibGVBZGRSZXN1bHQoKSA6IGlzTmV3RW50cnkoZmFsc2UpIHsgfQogICAg
ICAgICBIYXNoVGFibGVBZGRSZXN1bHQoSXRlcmF0b3JUeXBlIGl0ZXIsIGJvb2wgaXNOZXdFbnRy
eSkgOiBpdGVyYXRvcihpdGVyKSwgaXNOZXdFbnRyeShpc05ld0VudHJ5KSB7IH0KICAgICAgICAg
SXRlcmF0b3JUeXBlIGl0ZXJhdG9yOwogICAgICAgICBib29sIGlzTmV3RW50cnk7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE5MDA1OSkKKysrIFNvdXJjZS9XVEYvd3RmL1ByaW50
U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9SYXdQb2ludGVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC03NCwxMiArNzUsMTQgQEAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcgogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0IFN0cmluZ0ltcGwqKTsKIGlu
bGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIGJpdHdpc2VfY2FzdDxjb25zdCBT
dHJpbmdJbXBsKj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5h
bChvdXQsIGJpdHdpc2VfY2FzdDxjb25zdCBTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQoraW5saW5l
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBVbmlxdWVkU3RyaW5n
SW1wbCYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsICZ2YWx1ZSk7IH0KIGlubGluZSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY2hhciogdmFsdWUpIHsgcHJpbnRJbnRl
cm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPih2YWx1ZSkpOyB9CiBpbmxpbmUgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENTdHJpbmcmIHZhbHVlKSB7IHByaW50
SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBDU3RyaW5nJj4odmFsdWUpKTsgfQogaW5s
aW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdHJpbmcmIHZhbHVlKSB7
IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPih2YWx1ZSkpOyB9
CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0cmluZ0ltcGwq
IHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXBs
Kj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nh
c3Q8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVW5pcXVlZFN0cmluZ0ltcGwqIHZhbHVlKSB7IHBy
aW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCo+KHZh
bHVlKSk7IH0KK2lubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVW5p
cXVlZFN0cmluZ0ltcGwmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCAmdmFsdWUpOyB9CiBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgYm9vbCk7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgc2ln
bmVkIGNoYXIpOyAvLyBOT1RFOiB0aGlzIHByaW50cyBhcyBhIG51bWJlciwgbm90IGFzIGEgY2hh
cmFjdGVyOyB1c2UgQ2hhcmFjdGVyRHVtcCBpZiB5b3Ugd2FudCB0aGUgY2hhcmFjdGVyCiBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgdW5zaWduZWQg
Y2hhcik7IC8vIE5PVEU6IHNlZSBhYm92ZS4KQEAgLTE2OSw2ICsxNzIsMTIgQEAgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbgogICAgIG91dC5wcmludChwb2ludGVyRHVt
cCh2YWx1ZS5nZXQoKSkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IFJlZlB0cjxUPiYgdmFsdWUpCit7CisgICAg
b3V0LnByaW50KHBvaW50ZXJEdW1wKHZhbHVlLmdldCgpKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+CiBjbGFzcyBWYWx1ZUluQ29udGV4dCB7CiBwdWJsaWM6CkluZGV4
OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDE5MDA1OSkKKysrIFRvb2xz
L1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTY5OSw2ICs2
OTksMTAgQEAgZGVmIHJ1bldpdGhSQU1TaXplKHNpemUpCiAgICAgcnVuKCJyYW0tc2l6ZS0je3Np
emV9IiwgIi0tZm9yY2VSQU1TaXplPSN7c2l6ZX0iKQogZW5kCiAKK2RlZiBydW5Ob0pJVAorICAg
IHJ1bigibm8taml0IiwgIi0tdXNlSklUPWZhbHNlIikKK2VuZAorCiBkZWYgcnVuTm9MTEludAog
ICAgIGlmICRqaXRUZXN0cwogICAgICAgICBydW4oIm5vLWxsaW50IiwgIi0tdXNlTExJbnQ9ZmFs
c2UiKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>